MVC View不使用Ajax.ActionLink将Model数据传递给控制器

时间:2014-12-12 15:03:29

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

我的观点是

    @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值。虽然我通过隐藏但仍然在控制器中传递,但我没有从View

传递任何值

1 个答案:

答案 0 :(得分:0)

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

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

Ajax.BeginForm块中使用using(){}时,它会呈现<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" />
}

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

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

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