我的观点是
@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
传递任何值答案 0 :(得分:0)
因为@Ajax.ActionLink
只是调用一个动作,而不发布任何其他数据。
如果需要发布数据,则需要使用`@using(Ajax.BeginForm)'。请参阅docs here和sample 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脚本。