2013-09-23 1 views
1

Это мой html-Как передать идентификатор и имя @ Html.CheckBox с помощью коллекции форм в MVC3

<td> 
    @{ 
    IEnumerable<SelectListItem> Brands = ViewBag.GetBrands; 
    foreach (var item in Brands) 
     {                 
     @Html.CheckBox(item.Text, false)                                             
     <label>@item.Text</label><br /> 
     } 
    } 
</td> 

Im размещение этого контроллера в качестве данных в формате JSON (сбор форм). Как я могу получить флажки text и value в данных коллекции форм в контроллере?

+1

HTTP: //stackoverflow.com/questions/5284395/checkboxlist-in-mvc3-view-and-get-the-checked-items-passed-to-the-controller –

ответ

1

мне удалось получить ID по -

@Html.CheckBox(item.Text, false, new {item.Value}) 
0

Сначала вам нужно выполнить пост обратно на сервер.

@using (Html.BeginForm("actionname", "controller", 
        FormMethod.Post)) 
//your code 
@{ 
    IEnumerable<SelectListItem> Brands = ViewBag.GetBrands; 
    foreach (var item in Brands) 
     {                 
     @Html.CheckBox(item.Text, false)                                             
     <label>@item.Text</label><br /> 
     } 
    } 
<input type="submit" class="k-button" value="Submit" id="btnSubmit" name="btnSubmit" /> 
} 

Теперь в контроллере вы получите значения, используя коллекцию форм

[HttpPost] 
public ActionResult actionName(FormCollection collection) 
{ 

collection.keys["checkbox"].value ... your code 
} 
1

Как я могу получить текст и значение CheckBox в данных коллекции формы в контроллере?

Правильный подход заключается в использовании модели вида вместо этого IEnumerable<SelectListItem>. Таким образом, в основном ваша модель может выглядеть следующим образом:

public class BrandViewModel 
{ 
    public string Text { get; set; } 
    public bool Checked { get; set; } 
} 

, а затем добавить свойство к вашей основной модели представления (один ваш вид сильно типизированных к) типа IList<BrandViewModel>:

public IList<BrandViewModel> Brands { get; set; } 

, а затем это довольно легко:

<td> 
    @for (var i = 0; i < Model.Brands.Count; i++) 
    {                 
     @Html.CheckBoxFor(x => x.Brands[i].Checked) 
     @Html.LabelFor(x => x.Brands[i].Checked, Model.Brands[i].Text) 
     @Html.HiddenFor(x => x.Brands[i].Text) 
    } 
</td> 

и, наконец, вы можете избавиться от любого слабо типизированных FormCollection от вашего действия контроллера и просто взять модель представления:

[HttpPost] 
public ActionResult SomeAction(IList<BrandViewModel> brands) 
{ 
    ... 
} 

или, если есть и другие свойства, которые необходимо передать ваши действия контроллера может взять на себя основную модель представления:

[HttpPost] 
public ActionResult SomeAction(MainViewModel model) 
{ 
    // the model.Brands collection will be automatically bound here 
    ... 
} 
+0

Хотя я не уверен, что это правильный подход к MVC флажки без каких-либо логических значений, похоже, действительно работают л. Благодарю. – Harvey

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