0

コントローラーからビューにリストを渡し、フォーム内で各リストアイテムをループして、各アイテムに入力する必要のあるテキストボックスを含むテーブルを表示します。

次に、データをコントローラーに送信し、それを調べて入力内容の結果を取得し、データベースに保存します。

どうすればいいですか?私は自分のコードを下に置きました

コントローラ

public ActionResult GetListOfDogs()
{
var list = db.dogs;  //gets multiple dogs 
return View(dogs);

///Dog object looks like this
///int Id 
///string DogName 
///string RegNumber 
///string Breed 
}

[HttpPost]
public ActionResult SaveDogInfo(string[] RegNumber, string[] Breed)
{

}

見る

GetListOfDogs.cshtml

@model Dog

@using(Html.BeginForm("SaveDogInfo", "Dog", FormMethod.Post))
{
<table>
    <tr>
        <th>Name</th>
        <th>Reg Number</th>
        <th>Breed</th>
    </tr>
    @foreach (var item in Model)
    {
        <tr>
            <td>@item.DogName</td>
            <td>@Html.TextBox("RegNum", null, new{id = "dId_=" + @item.Id})</td>
            <td>@Html.TextBox("Breed", null, new{id = "breed_=" + @item.Id})</td>
        </tr>
    }
</table>
<input type="Submit" value="Save" />

}

'SaveDogInfo'アクション内で、RegNumberとBreedの結果を表示できますが、それらに返されるIDがないため、結果を実際のDogIdと照合する方法がありません。

誰かが助けることができますか、それとも私は完全に要点を逃していますか?

乾杯クリス

4

1 に答える 1

1

あなたの見解のモデルは列挙可能なものでなければなりませんね?

@model IList<Dog>

次に、forループを使用して、Idの非表示フィールドを追加します。

@for (var i = 0; i < Model.Count(); i++) 
    {
        <tr>
            <td>@Html.DisplayFor(m => Model[i].Name</td>
            <td>@Html.TextBoxFor(m => Model[i].RegNumber)</td>
            <td>
                @Html.TextBoxFor(m => Model[i].Breed)
                @Html.HiddenFor(m => Model[i].Id)
           </td>
        </tr>
    }

その後、あなたの投稿アクションは

[HttpPost]
public ActionResult SaveDogInfo(IEnumerable<Dog> dogs)
{

}
于 2013-02-04T22:17:37.563 に答える