Html.DropDownListFor<> ASP.NET MVC2中的复杂对象

时间:2010-04-04 12:29:23

标签: asp.net asp.net-mvc-2

我正在研究ASP.NET MVC2并尝试使用新的EditorFor语法发布复杂对象。

我有一个FraudDto对象,它有一个FraudCategory子对象,我想从表单中发布的值设置这个对象。

发布一个简单的对象不是问题,但我正在努力解决如何使用子对象处理复杂对象。

我在表单上绑定了以下父FraudDto对象:

public class FraudDto
{
    public FraudCategoryDto FraudCategory { get; set; }

    public List<FraudCategoryDto> FraudCategories { get; private set; }

    public IEnumerable<SelectListItem> FraudCategoryList
    {
        get
        {
            return FraudCategories.Select(t => new SelectListItem
            {
                Text = t.Name,
                Value = t.Id.ToString()
            }); 

        }

子FraudCategoryDto对象如下所示:

public class FraudCategoryDto
{
    public int Id { get; set; }

    public string Name { get; set; }
}

在表单上,​​我有以下代码,我想将FraudCategoryDto绑定到下拉列表。该视图的类型为ViewPage:

<td class="tac">
    <strong>Category:</strong>
</td>
<td>
    <%= Html.DropDownListFor(x => x.FraudCategory, Model.FraudTypeList)%>
</td>

然后我有以下控制器代码:

[HttpPost] 
public virtual ViewResult SaveOrUpdate(FraudDto fraudDto)
{
    return View(fraudDto);
}

当表单发布到服务器时,Fraud对象的FraudCategory属性为null。

我需要连接这个复杂对象的其他步骤吗?

1 个答案:

答案 0 :(得分:1)

下拉列表返回单个值,因此在这种情况下,它会尝试将值字符串设置为等于复杂对象。除非您有从字符串到对象的隐式转换,否则您尝试执行的操作可能无效。

我对如何解决此问题的任何建议都将基于您存储FraudCategoryDto对象的方法,或者您如何使用该信息。