在checkbox的值中使用model的实例

时间:2014-02-15 09:22:18

标签: c# asp.net-mvc

我正在尝试在复选框的value标记内使用对象的实例,这似乎不起作用。

我的观看代码:

@using (@Html.BeginForm("Purchase", "Upload"))
{
    foreach (var pic in Model) //pic is my class, Picture
    {
        <input type="checkbox" style="float: none" class="bootstrap-checkbox btn.btn-large" value="@pic" name="purchasedItems">
    }

    <input type="submit"/>
}

控制器代码:

[HttpPost]
public ActionResult Purchase(IEnumerable<Picture> purchasedItems)
{

    //My collection is empty here
}

如果我使用pic.Id并收到一组int而​​不是图片集,一切正常。

使用Id而不是对象本身是更好的方法吗?或者我应该使用对象并以某种方式修复我的代码?

3 个答案:

答案 0 :(得分:2)

是的,最好发送ID列表而不是对象本身的List,主要有两个原因:

  1. 传递给服务器/向客户端显示的数据越少,您节省的带宽就越多。
  2. 您不希望从客户端获取产品的全部数据,我可以使用类似Fiddler的东西轻松控制您收到的内容并更改产品的价格,例如:所以无论哪种方式,您都需要使用它的Id从数据库中再次检索产品数据(出于安全原因),那么为什么要传递整个对象数据呢?

答案 1 :(得分:1)

您可以使用表单集合从非标准控件中检索值:

public ActionResult EditProgramTemplateLines(FormCollection formCollection)
{
        for(var i=0; i< chkArrayLength; i++)
        {
           var chkId = formCollection.GetValues(i); // [1,2,3,4]
           ...
        }
}

答案 2 :(得分:1)

您可以使用

foreach (var pic in Model)
    {
        @Html.CheckboxFor(i => pic, new { @class = "bootstrap-checkbox btn.btn-large" });
    }

然后让Controller定期处理它。