1

これは私の見解です:

@foreach(var item in Model) {
 <tr id="TR@(item.Id)">
    @{Html.RenderPartial("_PhoneRow", item);}
 </tr>
}

_PhoneRow

@model PhoneModel
@using(Ajax.BeginForm("EditPhone", new { id = Model.Id }, new AjaxOptions {
UpdateTargetId = "TR" + Model.Id
})) {
<td>@Html.DisplayFor(modelItem => Model.PhoneNumber)</td>
<td>@Html.DisplayFor(modelItem => Model.PhoneKind)</td>
<td><input type="submit" value="Edit" /></td>
}

コントローラ:

public ActionResult EditPhone(long Id) {
  //Get model by id
  return PartialView("_EditPhoneRow", model);
}

public ActionResult SavePhone(PhoneModel model) {
  //Save Phone, and Get Updatet model
  return PartialView("_PhoneRow", model);
}

_EditPhoneRow

    @model PhoneModel
@using(Ajax.BeginForm("SavePhone", new { id = Model.Id }, new AjaxOptions {
UpdateTargetId = "TR" + Model.Id
})) {
<td>@Html.EditorFor(modelItem => Model.PhoneNumber)</td>
<td>@Html.EditorFor(modelItem => Model.PhoneKind)</td>
<td><input type="submit" value="Save" /></td>
}

したがって、[完全に置換されたボタン]をクリックしても、ボタンをクリックしてEditもgetが表示されない場合、問題はどこにありますか?新しい部分ビューで行を更新すると、新しいAjaxフォームが機能しないのはなぜですか?この問題は非常に人気があると思います。編集-任意の行にAjaxで保存する必要があります。あなたの提案は何ですか?またはそれのためのソースまたは良いサンプル?_EditPhoneRowSave

4

1 に答える 1

1

マークアップが壊れています。<form>の真下に要素をネストすることは禁止されてい<tr>ます。また、マークアップが壊れていると、未定義の結果が生じる可能性があります。あなたの場合、この未定義の結果は、2番目のフォームの送信ボタンをクリックしても送信イベントが発生せず、目立たないajaxライブラリがこのイベントのために存在/委任されたために何も起こらないという事実によって解釈されます。回避策は、別のテーブルを使用することです。

それで:

_PhoneRo.cshtml

@model PhoneModel
<td>
    @using (Ajax.BeginForm("EditPhone", new { id = Model.Id }, new AjaxOptions { UpdateTargetId = "TR" + Model.Id }))
    {
        <table>
            <tr>
                <td>@Html.DisplayFor(modelItem => modelItem.PhoneNumber)</td>
                <td>@Html.DisplayFor(modelItem => modelItem.PhoneKind)</td>
                <td><input type="submit" value="Edit" /></td>
            </tr>
        </table>
    }
</td>

_EditPhoneRow.cshtml

@model PhoneModel
<td>
    @using (Ajax.BeginForm("SavePhone", new { id = Model.Id }, new AjaxOptions { UpdateTargetId = "TR" + Model.Id }))
    {
        <table>
            <tr>
                <td>@Html.EditorFor(modelItem => modelItem.PhoneNumber)</td>
                <td>@Html.EditorFor(modelItem => modelItem.PhoneKind)</td>
                <td><input type="submit" value="Save" /></td>
            </tr>
        </table>
    }
</td>
于 2012-07-07T07:20:42.833 に答える