2014-12-29 9 views
-1

질문 행 수를 보유하는 데이터베이스 테이블이 있습니다. 이 양식을 사용하여 데이터베이스에서 질문을 얻습니다. '다음'단추를 누르면 완벽하게 작동합니다. 하지만 '이전'버튼을 누르면 항상 첫 번째 질문으로 이동합니다. 이전 질문으로 이동하려면이 항목이 필요합니다. 이 내 다른 방법은MVC에서 뷰의 값을 컨트롤러로 전달

[HttpGet] 
public ActionResult Index() 
{ 
    IQuestionService ser = new QuestionService(); 
    QuestionLoadDTO q = ser.GetIndividualQuestions(1); 
    //ViewBag.question = q; 
    return View(q); 
} 

[HttpPost] 
public ActionResult Index(QuestionLoadDTO ques) 
{ 
    int count = 0; 
    count = int.Parse(Request["qid"].ToString()); 
    count++; 
    if (count <= 4) 
    { 
     IQuestionService ser = new QuestionService(); 
     QuestionLoadDTO q = ser.GetIndividualQuestions(count); 
     return View(q); 
    } 
    return RedirectToAction("Submit");        

} 
public ActionResult PrevIndex(QuestionLoadDTO ques) 
{ 
    int count1 = 0; 
    count1 = int.Parse(Request["qid1"].ToString()); 
    count1--; 
    if (count1 < 5 || count1 >= 0) 
    { 
     IQuestionService ser = new QuestionService(); 
     QuestionLoadDTO q = ser.GetIndividualQuestions(count1); 
     //return View(q); 
     return RedirectToActionPermanent("Index",q); 
    } 
    return RedirectToAction("End"); 

} 
public ActionResult Submit() 
{ 
    return View(); 
} 
public ActionResult End() 
{ 
    return View(); 
} 

: 같은

@using (Html.BeginForm("Index", "Exam")) 
    { 

     @Html.Hidden("qid", Model.ID, new { @id = "id" }) 
     <table> 
      <tr> 
       <td> 
        @Model.ID 
       </td> 
       <td> 
        @Model.QuestionDes 
       </td>   
      </tr> 
      <tr> 
       <td> 
        <p>@Html.RadioButton("Answer1", new { @id = 1 }) @Model.Answer1 </p> 
       </td>    
      </tr> 
      <tr> 
       <td> 
        <p>@Html.RadioButton("Answer2", new { @id = 2 }) @Model.Answer2 </p> 
       </td>    
      </tr> 
      <tr> 
       <td> 
        <p>@Html.RadioButton("Answer3", new { @id = 3 }) @Model.Answer3 </p> 
       </td>    
      </tr> 
      <tr> 
       <td> 
        <p>@Html.RadioButton("Answer4", new { @id = 4 }) @Model.Answer4 </p> 
       </td> 
      </tr> 

     </table> 

     <input type="submit" value="Next" /> 

    } 
    @using (Html.BeginForm("PrevIndex", "Exam")) 
    { 

     @Html.Hidden("qid1", Model.ID, new { @id = "id1" }) 
     <input value="Prev" type="submit"/> 
    } 

이 내 컨트롤러 모양을 :

QuestionLoadDTO IQuestionService.GetIndividualQuestions(int index) 
{ 
    IQuestionData ser = new QuestionRepository();   

    QuestionLoadDTO q = ser.GetIndividualQues(index); 

    return q; 
} 
public QuestionLoadDTO GetIndividualQues(int index) 
{ 
    Context con = new Context(); 
    Question question = con.Questions.Find(index);//Where(e => e.ID == index).FirstOrDefault(); 
    QuestionLoadDTO dto = new QuestionLoadDTO() 
    { 
     ID = question.ID, 
     QuestionDes = question.QuestionDes, 
     Answer1 = question.Answer1, 
     Answer2 = question.Answer2, 
     Answer3 = question.Answer3, 
     Answer4 = question.Answer4 

    };         
    return dto; 
} 

누군가가 나에게 아이디어를 줄시겠습니까 이것은 내 양식이 같은 모습입니다 이것을 해결하기 위해. 미리 감사드립니다!

+0

오류가 있습니까? – Mairaj

+0

아니요 오류가 발생하지 않습니다 .... – Dayan

+0

질문이 4 개입니까? – Mairaj

답변

0

return RedirectToActionPermanent("Index", q) 

617,451,515,이 방법이 효율적으로 클라이언트 측 리다이렉션이므로 q 통과 않을 것이다. 또한 GET을 요청하는 반면, Index의 post overload가 호출 될 것으로 예상하는 것처럼 보입니다. 좋은 아이디어가 아닙니다.이 조치는 양식 게시를 처리하기위한 목적으로 적합합니다.

나는 다음과 같이 변경하는 것이 좋습니다 : 색인 작업의

[HttpGet] 
public ActionResult Index(int? qid) 
{ 
    int index = qid == null ? 1 : qid; 

    IQuestionService ser = new QuestionService(); 
    QuestionLoadDTO q = ser.GetIndividualQuestions(index); 
    //ViewBag.question = q; 
    return View(q); 
} 

가져 오기 과부하 이제로드 질문의 선택 인덱스에 걸립니다. 이제이 작업을 다시 사용하여 원하는 질문을 표시 할 수 있습니다.

여기에서 질문을 검색 할 필요가 없습니다. 적절한 질문 색인을 사용하여 색인으로 리디렉션하십시오.

0

아래와 같이 PrevIndex을 변경하면 RedirectToActionPermanent을 사용하여보기를 반환하지만 색인 방법에서는 모델 값이 허용되지 않습니다.

return RedirectToActionPermanent("Index",q); 

그리고 색인 방법은

public ActionResult Index() 

그래서이

같은

return RedirectToActionPermanent("Index",q); 

return View("Index",q); 

로 변경을 변경해야하는 인수를 허용하지 않습니다
public ActionResult PrevIndex(QuestionLoadDTO ques) 
    { 
     int count1 = 0; 
     count1 = int.Parse(Request["qid1"].ToString()); 
     count1--; 
     if (count1 < 5 || count1 >= 0) 
     { 
      IQuestionService ser = new QuestionService(); 
      QuestionLoadDTO q = ser.GetIndividualQuestions(count1); 
      return View("index",q); 

     } 
     return RedirectToAction("End"); 

    } 
+0

감사합니다 !!! 이것은 .... 작동합니다. – Dayan

0

이 내가 그것을 해결하는 방법입니다 ...... 난 그냥 때 지금 .... 을 반환보기 ("인덱스", Q)에 반환 "RedirectToAction"로 변경했다

public ActionResult PrevIndex(QuestionLoadDTO ques) 
{ 
    int count1 = 0; 
    count1 = int.Parse(Request["qid1"].ToString()); 
    count1--; 
    if (count1 < 5 || count1 >= 0) 
    { 
      IQuestionService ser = new QuestionService(); 
      QuestionLoadDTO q = ser.GetIndividualQuestions(count1); 
      //return View(q); 
      return View("Index",q); 
    } 
    return RedirectToAction("End");  
} 

"이전"버튼을 누르면 이전 질문으로 완벽하게 이동합니다 ....