3

マネージャーのリストを表示するビューを作成しています。マネージャの名前の横にはチェックボックスがあり、マネージャ リストから削除するように選択できます。フォーム送信をビュー モデルにバインドする際に問題が発生しています。ページは次のようになります。

ここに画像の説明を入力

ページの ViewModel は次のとおりです。

public class AddListManagersViewModel
{
    public List<DeleteableManagerViewModel> CurrentManagers;
}

各 DeleteableManagers のサブ ViewModel は次のとおりです。

public class DeleteableManagerViewModel
{
    public string ExtId { get; set; }
    public string DisplayName { get; set; }

    public bool ToBeDeleted { get; set; }
}

これはメイン ビューのコードです。

@model MyApp.UI.ViewModels.Admin.AddListManagersViewModel
<div class="row">
    <div class="span7">
        @using (Html.BeginForm("RemoveManagers","Admin"))
        {
            @Html.AntiForgeryToken()
            <fieldset>
                <legend>System Managers</legend>

                <table class="table">
                    <thead>
                        <tr>
                            <th>Name</th>
                            <th>Remove</th>
                        </tr>
                    </thead>

                    <tbody>
                        @Html.EditorFor(model => model.CurrentManagers)
                    </tbody>
                </table>
            </fieldset>
            <div class="form-actions">
                <button type="submit" class="btn btn-primary">Delete Selected</button>
            </div>
        }
    </div>
</div>

これは、DeleteableManagerViewModel 用に作成した EditorTemplate です。

@model MyApp.UI.ViewModels.Admin.DeleteableManagerViewModel

<tr>
    <td>@Html.DisplayFor(model => model.DisplayName)</td>
    <td>
        @Html.CheckBoxFor(model => model.ToBeDeleted)
        @Html.HiddenFor(model => model.ExtId)
    </td>
</tr>

しかし、フォームをコントローラーに送信すると、モデルは null に戻ります! これが私がやりたいことです:

[HttpPost]
public virtual RedirectToRouteResult RemoveManagers(AddListManagersViewModel model)
{
    foreach (var man in model.CurrentManagers)
    {
        if (man.ToBeDeleted)
        {
            db.Delete(man.ExtId);
        }           
    }
    return RedirectToAction("AddListManagers");
}

この投稿に沿って試してみました: CheckBoxList 複数の選択: モデル バインド バックの難しさですが、何かが欠けているに違いありません....

ご協力いただきありがとうございます!

4

1 に答える 1

1

うーん。これが最終的に問題だと思います。ここにあなたがポーズをとっているものがあります:

CurrentManagers[0].ToB‌​eDeleted=true&CurrentManagers[0].ToBeDeleted=false&CurrentManagers[0].Ext‌​Id=X00405982144

あなたのモデルはAddListManagersViewModelのコレクションを持つ ですCurrentManagers。したがって、DeleteableManagerViewModel「ラッパー」モデルにバインドされていない の配列を投稿しています。モデルパラメータを次のように変更してみることができます

params DeleteableManagerViewModel[] model

ただし、拡張機能は使用したことがないEditorForので、推測にすぎません...

于 2013-07-02T23:30:51.563 に答える