ASP.NET MVC:将复杂类型绑定到Select

时间:2009-02-16 22:12:12

标签: asp.net-mvc binding

如果有内置支持将复杂类型绑定到表单元素,我正在努力解决。

使用常见的假设情况: 我有一个属于类别的产品实体 - 模型看起来像这样:

public class Product
{
    public int ID { get; set; }
    public string Description { get; set; }
    public Category Category { get; set; }
}
public class Category
{
    public int ID { get; set; }
    public string Title { get; set; }
}

使用ASP.Net MVC框架创建一个表单来水合一个只包含简单值类型的新实体是好的和简单的,例如:

public ActionResult Create(Product product);

但是您的实体包含其他复杂类型的上述情况又如何呢?是否存在用于绑定IEnumerable< T >的内置机制。在下拉列表中,然后在提交表单时自动补充正确的 T

手动完成它将是相当微不足道的 - 我只是试图确定我可以免费获得的东西。

3 个答案:

答案 0 :(得分:2)

我还没有尝试过复杂类型的DefaultModelBinder,但你总是可以使用MvcContrib的CastleBind(借用Castle Project),它可以轻松地为你提供复杂的类型绑定,包括数组。 / p>

请参阅http://blogger.forgottenskies.com/?p=258

答案 1 :(得分:2)

请检查this,因为我认为谈到你的问题,似乎S#arp家伙已经解决了它,如果你不使用他们的东西,它很容易“撕裂”。

无论如何,我认为从用户帖子中自动加载实体有点危险......将不得不考虑它。

答案 2 :(得分:1)

我认为它最接近的是覆盖类中的ToString()方法,以便向DropDownList输出有意义的信息 - 但不是很多。

您可以将IEnumerable集合绑定到DropDownList,然后在提交表单时检索其SelectedItem - 这是我能想到的最便宜的方式。