2011-03-02 102 views
0

我採用這種模式有一個表格:表單驗證複雜型是無效

public class MyModel 
{ 
    public User SalesManager {get;set;} 
    public string Title {get;set;} 
    ... 
} 

呈現這樣使用下拉給用戶的一個的HtmlHelper擴展名列表:

<label for="SalesManager">Sales Manager</label> 
<select id="SalesManager" name="SalesManager"> 
    <option value="7">James Morrison</option> 
    <option selected="selected" value="300">Ray Manzarek</option> 
    <option value="302">Robby Krieger</option> 
    <option value="302">John Densmore</option> 
</select> 

和這樣的動作:

[HttpPost] 
public ActionResult SomeAction(FormCollection form) 
{ 
    ... 
} 

我得到驗證ModelState錯誤:SalesManager屬性爲。我怎樣才能接受一個int值,並擔心稍後實例化我的用戶(例如在ModelBinder中)。或者我剛剛接近這個錯誤?

回答

0

你的HTML應該是這樣的:

<select id="SalesManager_UserId" name="SalesManager.UserId"> 

,因爲你不能將值302一個複雜的對象,如User

所以助手應該是這樣的:

<%= Html.DropDownListFor(x => x.User.UserId, Model.PossibleValues) %> 
+0

難道有IValueProvider或ModelBinder的東西,我可以用在屬性級別來處理呢? – mxmissile 2011-03-03 17:52:32

+0

@mxmissile,我不明白你。你有一個視圖模型=>使用強類型的助手,它將負責生成適當的標記。 – 2011-03-03 17:55:17

0

您將需要在爲MyModel聲明一個int屬性,說SelectedUser,如果你使用的是HTML輔助你可以做到這一點改變呈現的選擇

<select id="SelectedUser" name="SelectedUser"> 

HtmlHelper.ListBoxFor("SelectedUser", Model.YourSelectList")