2010-06-01 57 views
0

這個對我來說似乎很痛苦,但由於某種原因,我無法按照我希望的方式工作。也許這是不可能的,但這似乎不大可能。這個問題可能有點相關:ASP.NET MVC Model Binding Related Entities on Same PageASP.NET MVC - 綁定一個子實體到模型

我有一個EditorTemplate編輯具有多個相關實體引用的實體。當呈現編輯器時,用戶被賦予下拉列表以從中選擇相關實體,並且下拉列表返回ID作爲其值。

<%=Html.DropDownListFor(m => m.Entity.ID, ...)%> 

當發送請求的形式值命名爲預期:「Entity.ID」,但定義爲動作參數我強類型的模型沒有Entity.ID填充在傳遞的值請求。

public ActionResult AddEntity(EntityWithChildEntities entityWithChildEntities) { } 

我試圖用bind()的屬性擺弄周圍並在entityWithChildEntities指定Bind(Include = "Entity.ID"),但似乎並沒有工作。我也試過Bind(Include = "Entity"),但是導致ModelBinder試圖綁定一個完整的「實體」定義(並不奇怪)。

有沒有什麼辦法讓默認的模型綁定,以填補子實體ID或我將需要添加動作參數爲每個孩子實體的ID,然後將值手動複製到模型中定義?

+0

是否'實體'屬性有任何訪問修飾符,除'公共'?喜歡這個; '公民HomeTestModelChild兒童{get;內部設置; }' – cem 2010-06-02 13:09:12

+0

不,先生,這一切都是公開的。 – 2010-06-02 16:54:58

回答

1

你看過AutoMapper嗎?我同意這不應該是必需的,因爲綁定應該可以工作,但...

我使用Html.XYZFor幫助器時遇到了一些困難,並且已經恢復爲使用MVC 1.1表示法,並且它都可以工作。

+0

我其實還沒有檢出AutoMapper。這是一段時間的工作。 – 2010-06-02 16:54:32

0

有沒有DropDownListFor輔助方法,只需要一個參數。標準DropDownListFor方法需要至少兩個參數:第一個是一個lambda用於計算選擇的名稱,第二個是IEnumerable<SelectListItem>

<%= Html.DropDownListFor(m => m.Entity.ID, Model.EntitiesList) %> 

另外如何的EntityWithChildEntities類型樣子?它必須是這樣的:

public class EntityType 
{ 
    public string ID { get; set; } 
} 

public class EntityWithChildEntities 
{ 
    public EntityType Entity { get; set; } 

    public IEnumerable<SelectListItem> EntitiesList 
    { 
     get 
     { 
      return new[] 
      { 
       new SelectListItem { Value = "1", Text = "foo" }, 
       new SelectListItem { Value = "2", Text = "bar" }, 
      } 
     } 
    } 
} 
+0

我欣賞的答案,但並不意味着我的僞代碼進行字面解釋。從實施的角度來看,一切都是正確構建的問題是,儘管在表單發佈中接收了正確命名的值,但模型的子實體沒有被填充。換句話說,表單字段名稱和值是正確的,但是模型輸出不符合預期。 – 2010-06-02 06:37:02