2

私のMVC4プロジェクトビューでは、IEnumerable<Settings>モデルをビューに渡しています。フォームをコントローラーに送信すると、コントローラーメソッドのパラメーターはIEnumerable<Settings> data. 問題は、それdataが常に null であることです。

意見

@model IEnumerable<Settings>

@using (Html.BeginForm("Index", "Layout", FormMethod.Post)))
{
    @foreach (var item in Model)
    {
       @Html.CheckBoxFor(modelItem => item.IsActive, new { @value = item.Id })
       @Html.DisplayFor(modelItem => item.Name)
    }
    <input type="submit" value="Save" />
}

コントローラ

[HttpPost]
public ActionResult Index(IEnumerable<Settings> data)
{
    --actual code goes here
}

モデル

[Serializable]
public class Settings
{   
    public virtual byte Id { get; set; }

    public virtual string Name { get; set; }

    public virtual bool IsActive { get; set; }

    public virtual DataTable DataResult { get; set; }

    public virtual int CreatedBy { get; set; }

    public virtual DateTime CreatedDate { get; set; }

    public virtual int ClientId { get; set; }

    public virtual Int16 NoofItems { get; set; }
}

更新: *レンダリングされた HTML *

<td>
    <input checked="checked" data-val="true" data-val-required="The IsActive field is required." id="item_IsActive" name="item.IsActive" type="checkbox" value="13" class="valid"><input name="item.IsActive" type="hidden" value="false">
                                # of pieces

                                </td>

Update1: Andrei の回答に従って HTML をレンダリング

<td>
     <input checked="checked" data-val="true" data-val-required="The IsActive field is required." name="[0].IsActive" type="checkbox" value="13"><input name="[0].IsActive" type="hidden" value="false">
                                    # of pieces</td>
4

3 に答える 3

5
@Html.CheckBoxFor(modelItem => item.IsActive, new { @value = item.Id })

入力の正しい名前を生成するつもりはありません。フォームはitem.IsActive=true、すべてのアイテムに対して同じトークン (または false) を送信します。このアプローチはプリミティブでは機能しますが、複合型では機能しません。

forただし、代わりに を使用してできることは次のforeachとおりです。

@model IList<Settings>

@using (Html.BeginForm())
{
    @for(int i=0; i<Model.Count; i++)
    {
       @Html.CheckBoxFor(m => m[i].IsActive, new { @value = Model[i].Id })
       @Html.DisplayFor(m => m[i].Name)
    }
    <input type="submit" value="Save" />
}

これには、少なくともIList<>ビュー タイプが必要であることに注意してください。そうしないと、コレクションを使用して反復できませんfor

于 2013-06-21T12:03:21.733 に答える
0

renderred html を投稿できますか?

ここに問題があると思います: 入力 (チェックボックス) の名前はIsActivehtml になります。送信を押すと、フォームは key でデータを送信しますIsActive。コントローラーでは、現在呼び出されるパラメーターが予期されているdataため、不一致があります。

これをトラブルシューティングするには、コントローラーにブレークポイントを追加し、Request["IsActive"] に値があるかどうかを確認します。

更新:ウォークスルーについては、こちらを参照してください。

name最初に入力の をに変更してみてくださいdata。あなたはそれを試みることができます:

@Html.CheckBoxFor(modelItem => item.IsActive, new { @value = item.Id, name="data" })

変更後、フォームはコンマ区切りの値のリストをコントローラーに送信する必要があります。同様にfirebugを開いて、コントローラーに投稿されたものをここに投稿できますか?

于 2013-06-21T11:54:43.503 に答える