2014-11-24 2 views
0

В моем контроллере я поставил элементы в ViewBag:Как установить выбранную модель со списком?

List<ShopItemModel> items = new List<ShopItemModel>(); 
/* populate my items */ 
ViewBag.Items = items; 

Так на cshtml я бег через список, но как я могу подключить его так далее постбэк задает аргумент метода Post в контроллере?

CSHTML:

@model Models.ShopItemModel 

<h2>Webshop</h2> 

@foreach(var item in ViewBag.Items) 
{ 
    using (Html.BeginForm()) 
    { 
     <p>@item.Name</p> <!-- List the item name, but not bounded? --> 

     @Html.LabelFor(model => model.Name, new { Name = item.Name }) <!-- outputs just "Name", not the items name --> 

     <input type="submit" value="Buy" /> 
    } 
} 

Сообщение версия метода в контроллере:

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Index(ShopItemModel m) 
{ 
    return View(); 
} 

Но как исправить эту привязку? Итак, я выбираю выбранный элемент из списка?

+0

Что вы пытаетесь сделать? Не создавайте никаких элементов управления (input, select, textarea) для свойств модели в вашей форме, чтобы ничего не было отправлено назад. И что вы подразумеваете под выбранным пунктом? Как вы выбираете элемент? –

ответ

0

На вашем взгляде:

using (Html.BeginForm()) 
{ 
    for (int i = 0; i < Model.Count; i++) 
    { 
     @Html.LabelFor(model => model[i].Name) 
    } 
} 

Это будет производить элементы управления HTML, как это:

<input name="ShopItemModel[3].Name" ... 

Если вы используете это в форме, в контроллере, перебрать посланные модели данных :

foreach (var item in model) 
{ 
    ... do something to each item 
} 

Вы можете использовать foreach петля на вид, а не for петля, пример here

Смежные вопросы