0
using (Ajax.BeginForm("SaveTimeShift", new AjaxOptions { HttpMethod = "Get", UpdateTargetId = "recordList", InsertionMode = InsertionMode.Replace }))

上記の Ajax.BeginForm のこのオーバーロードされたコンストラクターを使用すると、モデルで更新されたデータが取得されますが、以下でこのオーバーロードされたコンストラクターを使用すると、モデルの更新された値が取得されないのはなぜですか? フォームの html クラス属性を設定するには、以下のコンストラクターが必要です...

  using (Ajax.BeginForm("SaveTimeShift", @Model, new AjaxOptions { HttpMethod = "Get", UpdateTargetId = "recordList", InsertionMode = InsertionMode.Replace }, new { @class = "form-inline" }))
            {


        @Html.TextBoxFor(model => model.StartDate, new { id = "startDate", @readonly = true, width = "100px" })
        @Html.HiddenFor(model => model.SelectedName, new { id = "selectedName" });
        @Html.HiddenFor(model => model.SelectedUserId, new { id = "selectedUserId" });



        <input class="btn btn-primary pull-right" type="submit" value="Save Time Shift" />
        }
4

1 に答える 1

1

2 番目Ajax.BeginForm()のメソッド シグネチャは次のとおりです。

public static MvcForm BeginForm(this AjaxHelper ajaxHelper, string actionName, Object routeValues, AjaxOptions ajaxOptions, Object htmlAttributes)

ルート値として渡そうとして@Modelいますが、これはモデル バインディングのしくみではありません。モデル バインダーは、ポストされたフォーム値を介して複雑なモデル オブジェクトを構築します。メソッドを次のように変更するAjax.BeginForm()と、問題が解決するはずです。

@using (Ajax.BeginForm("SaveTimeShift", new { }, new AjaxOptions { HttpMethod = "Get", UpdateTargetId = "recordList", InsertionMode = InsertionMode.Replace }, new { @class = "form-inline" }))
{
    // Your textboxes, etc corresponding to your model properties go here
}
于 2012-11-19T08:35:35.497 に答える