2012-04-29 60 views
0

我試圖添加一個DropDownList到MVC 查看並不斷收到以下錯誤。點擊表單提交後會發生這種情況。任何人都可以幫助闡明這意味着什麼以及我如何解決它?MVC DropDownList導致表單異常提交

錯誤消息

The ViewData item that has the key 'Amount' is of type 'System.String' but must be of type 'IEnumerable<SelectListItem>'. 

爲背景,這裏是我已經設置了模式查看導致上述錯誤

對於模型.. 。

[Required] 
[DataType(DataType.Currency)] 
[Display(ResourceType = typeof(Resources.Resources), Name = "ApplicationAmountLabel")] 
public string Amount { get; set; } 

public IEnumerable<SelectListItem> Amounts { get; set; } 

當模型建立,這裏的值是如何設置的?

model.Amounts = GetAmounts(); 

... 

private IEnumerable<SelectListItem> GetAmounts(List<int> amounts) 
{ 
    var list = new List<SelectListItem>(); 

    list.Add(new SelectListItem { Text = string.Empty, Value = "0" }); 

    foreach (var amount in amounts) 
    { 
     list.Add(new SelectListItem { Text = amount.ToString("C"), Value = amount.ToString() }); 
    } 

    return list; 
} 

最後,這裏是如何在視圖中使用...

@Html.LabelFor(m => m.Amount) 
@Html.DropDownListFor(m => m.Amount, Model.Amounts, "-- Select One --") 
@Html.ValidationMessageFor(m => m.Amount) 
+0

優秀的錯誤消息說這一切。, – RickAndMSFT

回答

1

此錯誤消息的一個可能的原因是public IEnumerable<SelectListItem> Amounts { get; set; }提交表單後,您的模型屬性爲null。發送張貼的模型視圖之前,設置Amounts屬性的值:

model.Amounts = GetAmounts(); 

這種異常是由Html.DropDownListFor() 助手方法拋出,而selectList參數爲null。如果selectList參數爲null,則幫助程序方法將嘗試從屬性表達式(m => m.Amount)的名稱(此處爲Amount)獲取ViewData中參數selectList的項目。它將從ViewData中獲得名稱Amount的值,它的類型爲String,但它預計類型爲IEnumerable<SelectListItem>

1

看起來我喜歡錶單提交的控制器操作的簽名具有錯誤類型的金額(它發生在您單擊提交時發生)