在AjaxForm中使用UpdateTarget的Ajax.BeginForm

时间:2012-07-04 12:47:32

标签: ajax asp.net-mvc asp.net-mvc-3 asp.net-mvc-ajax

这是否可以在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的所有页面问题在哪里?你有什么建议改变这样的特定行?

1 个答案:

答案 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.BeginFormAjax.ActionLink帮助程序将是简单的HTML表单和锚点。根本没有AJAX。正是这个脚本读取了那些助手发出的HTML5 data- *属性,并且不引人注意地将它们AJAX化。