如何通过MVC3中的表单集合传递@ Html.CheckBox的id和名称

时间:2013-09-23 05:39:53

标签: c# asp.net asp.net-mvc asp.net-mvc-3 razor

这是我的HTML -

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

我将此控制器作为JSON数据(表单集合)发布。如何在控制器中的表单集合数据中获取复选框textvalue

3 个答案:

答案 0 :(得分:1)

  

如何在控制器中获取表单集合数据中的复选框文本和值?

正确的方法是使用视图模型而不是此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
    ...
}

答案 1 :(得分:1)

我设法通过 -

获取ID
@Html.CheckBox(item.Text, false, new {item.Value}) 

答案 2 :(得分: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
}