0

这是否可以Ajax.Beginform与 ajax 表单内的更新目标一起使用。像这样:

 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 表单,所以当点击编辑时,我想用另一个行替换你所看到的,但是当我添加编辑时,我的所有页面都被破坏了,_EditPhoneRow就像我选择所有页面updateTrget一样问题?你有什么建议像这样改变所有特定的行?

4

1 回答 1

0

根据 HTML 规范,表格不能嵌套。这会产生无效的 HTML,并且取决于用户代理,外部或内部<form>根本无法工作。这是 HTML 规范的限制,不要与 ASP.NET MVC 混淆,与它无关。一种可能性是将您的替换Ajax.BeginFormAjax.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 化处理。

于 2012-07-04T12:51:32.490 回答