2013-08-04 36 views
0

我有這種模式,有一個字典的聯絡信息:模型綁定字典罰款的出路,但沒有在途中?

public class UserInfo 
{ 
    public int UserId { get; set; } 

    [Display(Name = "First Name")] 
    public string FirstName { get; set; } 

    [Display(Name = "Last Name")] 
    public string LastName { get; set; } 

    public Dictionary<ContactType, AccountContactInfo> ContactInfo { get; set; } 

    public UserInfo() 
    { 
     ContactInfo = new Dictionary<ContactType, AccountContactInfo>(); 
    } 
} 

ContactType是enuerations如航運,計費等枚舉AccountContactInfo是簡單的一個視圖模型。純字符串屬性,沒有別的。

以下是讀取模型的示例部分視圖。這的UserInfo對象是主力機型裏面:

<div id="shipping-address" class="confirm-addresses"> 
    <h3>Shipping Address</h3> 
    @Html.LabelFor(m => m.UserInfo.ContactInfo[ContactType.Shipping].Street) 
    @Html.TextBoxFor(m => m.UserInfo.ContactInfo[ContactType.Shipping].Street) 

    @Html.LabelFor(m => m.UserInfo.ContactInfo[ContactType.Shipping].City) 
    @Html.TextBoxFor(m => m.UserInfo.ContactInfo[ContactType.Shipping].City) 

    @Html.LabelFor(m => m.UserInfo.ContactInfo[ContactType.Shipping].State) 
    @Html.TextBoxFor(m => m.UserInfo.ContactInfo[ContactType.Shipping].State, new { maxlength = 2}) 

    @Html.LabelFor(m => m.UserInfo.ContactInfo[ContactType.Shipping].Zip) 
    @Html.TextBoxFor(m => m.UserInfo.ContactInfo[ContactType.Shipping].Zip, new { maxlength = 5}) 

    @Html.LabelFor(m => m.UserInfo.ContactInfo[ContactType.Shipping].Phone1) 
    @Html.TextBoxFor(m => m.UserInfo.ContactInfo[ContactType.Shipping].Phone1, new { maxlength = 10}) 

    @Html.LabelFor(m => m.UserInfo.ContactInfo[ContactType.Shipping].Phone2) 
    @Html.TextBoxFor(m => m.UserInfo.ContactInfo[ContactType.Shipping].Phone2, new { maxlength = 10}) 

</div> 

如果完全建立模型的頁面,它會顯示完全正常。然而,當我發回給控制器,它崩潰以下情況例外:

異常詳細信息:System.InvalidCastException:指定強制轉換 有效。

它似乎與字典有關,因爲這是我添加字典的最近更改,我確定就是這樣。這裏是堆棧跟蹤,如果有幫助的話:http://pastebin.com/8vyPWiFn

我在控制器動作中設置了斷點,但調試器永遠不會到達這一點,所以我假設它在反序列化過程中的某個時刻斷了?我不明白爲什麼這種方式在頁面的出路上工作,但不在回到控制器的路上。我發送的信息與發送的信息相同。

+0

你的ACtion方法是什麼樣的? – Nilesh

+0

它現在不會做任何事情,但簽名只需要一個參數,它是上述的父模型。 – Sinaesthetic

回答

0

呀結合字典是有點棘手,你只需要提供正確的元素名稱,因此,例如:

@Html.Hidden("ContactInfo[0].Key", ContactType.Technical) 
@Html.TextBox("ContactInfo[0].Value.Street", "Some street") 

@Html.Hidden("ContactInfo[1].Key", ContactType.Billing) 
@Html.TextBox("ContactInfo[1].Value.Street", "Some billing address") 

您也可能會發現this article幫助。

相關問題