2014-12-12 7 views
0
를 사용하여 컨트롤러로 모델 데이터를 전달하지

내보기MVC보기 Ajax.ActionLink

@model IEnumerable<Trials.ViewModels.PList> 
    @foreach (var item in Model) { 
     string target = ""; 
     if (ViewBag.func == "Screening") 
     { 
      target = "DivDialogDiv_Scrng"; 
     } 
     else if (ViewBag.func == "Eligible") 
     { 
      target = "DivDialogDiv_Eligible"; 
     } 

     <tr> 
      <td> 
       @Html.DisplayFor(modelItem => item.UnitNo) 

      </td> 
         <td> 
       @Html.DisplayFor(modelItem => item.PName) 
      </td> 
      <td> 
       @Html.DisplayFor(modelItem => item.PAge) 
       @Html.HiddenFor(x=> item.PAge) 
      </td> 
      <td> 
       @Html.ValueFor(modelItem => item.StartDate, "{0:dd/MM/yyyy}") 
      </td> 
      <td> 
       @Html.ValueFor(modelItem => item.EndDate, "{0:dd/MM/yyyy}") 
      </td> 
      <td> 


    <b>@Ajax.ActionLink("Screen", "getQuestions", "Screening",new AjaxOptions { HttpMethod = "GET", LoadingElementId="divLoading", UpdateTargetId [email protected], InsertionMode = InsertionMode.Replace,OnSuccess="openDialog"})</b> 
    @Html.HiddenFor(modelitem=> item.TId) 

      @Html.HiddenFor(x=> item.Status_Id) 
      @Html.HiddenFor(x=> item.UnitNo) 
      @Html.HiddenFor(x=> item.ResponseID) 

      </td> 
    </tr> 
} 
</tbody> 
</table> 

하고 컨트롤러에서 나는 문제는 내가 0과 null 값을 얻고 있다는 점이다

public ActionResult getQuestions(T.ViewModels.PList pl) 
     { 
      List<PatientQuestions> model = rep.getQuest(pl.TId,User.Identity.Name); 
      return PartialView("_getQuestions",model); 
     } 

으로 받기 컨트롤러에서. 컨트롤러로 숨겨져 있지만 여전히 전달 된 값은 없습니다.보기

답변

0

@Ajax.ActionLink은 추가 데이터를 게시하지 않고 단순히 액션을 호출하기 때문에.

데이터를 게시해야하는 경우`@using (Ajax.BeginForm) '을 사용해야합니다. docs heresample here을 참조하십시오. 만약 using(){} 블록 내 Ajax.BeginForm을 사용할 때

, 그것은 <form></form> 태그를 렌더링하고, 렌더링 블록 내부의 모든 입력 컨트롤이 형태에 포함된다. 그런 다음 양식이 제출되면 예상대로이 입력의 모든 데이터가 컨트롤러로 전송됩니다. 이것의

아주 간단한 예 :

<div id="result"></div> 

@using (Ajax.BeginForm("getQuestions", "Screening", 
    new AjaxOptions { UpdateTargetId = "result" })) 
{ 
    @Html.HiddenFor(modelitem=> item.TId) 
    @Html.HiddenFor(x=> item.Status_Id) 
    @Html.HiddenFor(x=> item.UnitNo) 
    @Html.HiddenFor(x=> item.ResponseID) 
    <input type="submit" value="Screen" /> 
} 

은 확실히 당신이 코드는 당신이 (필요한 모든 아약스 옵션을 지정) 할 필요가 정확히 무엇을 수정해야합니다. 그리고 데이터를 게시 할 때 "GET"메서드 대신 "POST"메서드를 사용해야하고 게시 요청 ([HttpPost])을받을 수 있도록 작업을 꾸미십시오.

참고 : GET 요청의 모든 데이터를 URL 쿼리 문자열로 보낼 수는 있지만 요청 본문에 게시하는 것이 훨씬 좋습니다.

중요 : 이미 사용하고 있지만 반드시 jQuery Unobtrusive AJAX 스크립트를 포함해야합니다.

+0

감사합니다. – Khan