【问题标题】:MVC View not passing Model data to controller using Ajax.ActionLinkMVC 视图不使用 Ajax.ActionLink 将模型数据传递给控制器
【发布时间】:2015-02-11 07:50:43
【问题描述】:

我的观点是

    @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 =@target, 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>

在控制器中我接收为

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

问题是我在控制器中得到 0 和 null 值。虽然我通过隐藏但仍然在控制器中我没有得到任何从视图传递的值

【问题讨论】:

    标签: asp.net-mvc-4 model-view-controller ajaxform


    【解决方案1】:

    因为@Ajax.ActionLink 只是调用一个操作,而不发布任何其他数据。

    如果你需要发布数据,你需要使用`@using(Ajax.BeginForm)'。请参阅docs heresample here

    当您在using(){} 块中使用Ajax.BeginForm 时,它会呈现&lt;form&gt;&lt;/form&gt; 标记,并且块内呈现的所有输入控件都包含在此表单中。然后,当表单提交时,这个输入的所有数据都会发送到控制器,正如你所期望的那样。

    一个非常简单的例子:

    <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" />
    }
    

    显然,您必须修改此代码才能完全按照您的需要进行操作(指定所有必需的 ajax 选项)。并考虑到,当您要发布数据时,您应该使用“POST”方法而不是“GET”方法,并装饰您的操作以便能够接收发布请求 ([HttpPost])。

    注意:您可以在 GET 请求中,在 URL 查询字符串中发送所有数据,但最好在请求正文中 POST。

    重要提示:尽管您必须已经在使用它们,但不要忘记包含 jQuery Unobtrusive AJAX 脚本。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多