【问题标题】:Html.DropDownListFor<> and complex object in ASP.NET MVC2ASP.NET MVC2 中的 Html.DropDownListFor<> 和复杂对象
【发布时间】:2012-05-22 22:38:20
【问题描述】:

我正在查看 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 属性为空。

我需要什么额外的步骤来连接这个复杂的对象吗?

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 这有效: x.FraudCategory.Id,Model.FraudCategoryList, new { Style = "width:200px" })%> 我正在设置的值子对象。像往常一样,所有示例都只使用简单的对象。
    • 啊,这个解决方案很好,我完全忘记了。我正要建议使用存储库。看起来这并没有加载类别名称字段。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-19
    • 1970-01-01
    • 2015-03-28
    相关资源
    最近更新 更多