2011-10-27 61 views
0

我在ASP.MVC3下拉列表中遇到了一個奇怪的問題。 我有一個看起來像這樣的視圖模型:asp.mvc3 @ Html.DropDownListFor <>無法正常工作

public class dto{ 
    [Key] 
    public Int32 ClientID { get; set; } 
    [Required, MaxLength(50)] 
    public Name{get;set;} 

    public int ClientTypeID { get; set; } 

    public SelectList ClientTypes { get; set; } 
} 

剃鬚刀使用:

<div class="editor-label"> 
    @Html.LabelFor(model => model.ClientTypeID) 
</div> 
<div class="editor-field"> 
    @Html.DropDownListFor(x => x.ClientTypeID,Model.ClientTypes) 
</div> 

在控制器我填的是ClientTypes數據。 當我用它來創建一個新的dto對象時,它可以正常工作,並將選擇轉移回控制器並保存。 當我使用它來編輯一個現有的對象時,它也可以正常工作,當頁面打開時選擇適當的值。

問題是,當我改變選擇時,它不會回發給控制器,而其他編輯的值會正確返回。

任何人都可以指出我的問題的方向?

謝謝。

回答

0

所以,在我的代碼我做這樣的事情 - 在視圖模型我有一個IEnumerable:

public IEnumerable<Choice> Choices { get; set; } 

其被填充回到控制器動作。

Choice看起來像

public class Choice 
{ 
    public int Id { get; set; } 
    public string Text { get; set; } 
} 

,並在我的ViewModel我也有看起來像這樣的成員:

public int TheChoice { get; set; } 

,然後在我看來,我已經得到的東西,看起來像這樣:

@Html.DropDownListFor(model => model.TheChoice, new SelectList(Model.Choices, "Id", "Text", @Model.TheChoice)) 

這似乎工作得很好。

你在做什麼不同的事情嗎?

+0

我似乎錯過了最後@ Model.TheChoice部分。但是增加等價物並沒有改變事物。它仍然適用於所有情況,除了將更新的值發送回控制器。 – Zaak

+0

爲了澄清,如果您在控制器操作中放置斷點並檢查從視圖返回的viewmodel參數,您會發現viewmodel參數中的ClientID值具有* old *值,而不是* new * ? – itsmatt

+0

不是cliendID,而是ClientTypeID,但是,這是正確的。我可以看到來自VM的所有值,並且文本字段被更新,只是ClientTypeID不是。它仍然是舊的價值。我已經得出結論,這意味着它被正確地發送到那裏,並且再次返回,只是沒有在那裏更新。我不知道爲什麼。 – Zaak

相關問題