这是否可以在ajax表单中使用Ajax.Beginform
更新目标。像这样:
using(Ajax.BeginForm("EditPhone", new { id = item.Id.Value }, new AjaxOptions {
UpdateTargetId = "TRTarget"})) {
<tr class="gradeA odd" id="TRTarget">
<input type"submit" value="submit" />
</tr>
}
更新
好的,如果有可能,那么这有什么问题?
这是我的局部视图,在其中呈现另一个局部视图:
using(Ajax.BeginForm("EditPhone", new { id = item.Id.Value }, new AjaxOptions {
UpdateTargetId = "TRTarget"})) {
<tr class="gradeA odd" id="TRTarget">
@{Html.RenderPartial("_PhoneRow", item);}
</tr>
}
和_PhoneRow
:
@model MyModel
<td>@Html.DisplayFor(model=>model.Number)</td>
<td>@Html.DisplayFor(modelItem => Model.PhoneKind)</td>
<td><input type="submit" value="Edit" class="button" /></td>
EditPhone
行动:
public ActionResult EditPhone(long Id){
//Get model
return PartialView("_EditPhoneRow", model);
}
_EditPhoneRow
:
<td>@Html.EditorFor(model => model.MainModel.Number)</td>
<td>@Html.EditorFor(model => model.MainModel.PhoneKind)</td>
<td><input type="submit" value="Save" class="button" /></td>
实际上我的每一行都有一个Ajax表单,因此当点击编辑时我想用你看到的那个替换另一行,但是当我添加Edit时,我的所有页面都被销毁,只有_EditPhoneRow
显示为我选择updateTrget
的所有页面问题在哪里?你有什么建议改变这样的特定行?
答案 0 :(得分:0)
<击>
根据HTML规范表单不能嵌套。这会产生无效的HTML,并且根据用户代理,外部或内部<form>
根本不起作用。这是HTML规范的限制,不要与ASP.NET MVC混淆,它与它无关。一种可能性是将Ajax.BeginForm
替换为Ajax.ActionLink
:
<tr class="gradeA odd" id="TRTarget">
@Ajax.ActionLink(
"Submit",
"EditPhone",
new { id = item.Id.Value },
new AjaxOptions { UpdateTargetId = "TRTarget" }
)
</tr>
击> <击> 撞击>
更新:
在您更新了问题并解释了症状后,我认为您可能忘记将jquery.unobtrusive-ajax.min.js
脚本引用到您的网页:
<script type="text/javascript" src="@Url.Content("~/scripts/jquery.unobtrusive-ajax.min.js")"></script>
如果您不包含此脚本,Ajax.*
和Ajax.BeginForm
等Ajax.ActionLink
帮助程序将是简单的HTML表单和锚点。根本没有AJAX。正是这个脚本读取了那些助手发出的HTML5 data- *属性,并且不引人注意地将它们AJAX化。