2010-04-04 29 views
4

我正在看ASP.NET MVC2並試圖發佈一個複雜的對象使用新的EditorFor語法。Html.DropDownListFor <>和複雜的對象在ASP.NET MVC2

我有一個FraudDto對象有一個FraudCategory子對象,我想從表單中發佈的值設置此對象。

發佈一個簡單的對象不是問題,但我正在努力處理與子對象的複雜對象。

我有以下父FraudDto對象whcih我在表格上結合:

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); 
} 

當窗體發送到服務器,所述欺詐對象的FraudCategory屬性爲null。

有沒有任何額外的步驟,我需要鉤住這個複雜的對象?

回答

1

下拉列表返回單個值,因此在這種情況下,它試圖將值字符串設置爲等於您的複雜對象。除非你有一個從字符串到你的對象的隱式轉換,否則你試圖做的事情可能不起作用。

對於如何解決此問題,我可能會有什麼建議將基於您的方法來存儲FraudCategoryDto對象,或者您如何使用該信息。

+0

這工作: <%= Html.DropDownListFor(X => x.FraudCategory.Id,Model.FraudCategoryList,新的{形式= 「寬度:200像素」})%> 我設置的值子對象。與往常一樣,所有的例子都只適用於簡單的對象。 – dagda1 2010-04-04 13:16:01

+0

啊,這個解決方案很好的呼籲,這完全跳過了我的想法。我正要建議使用存儲庫。它看起來像不會加載類別名稱字段。 – 2010-04-04 13:24:17