我正在尝试将 DropDownList 添加到MVC 查看并继续收到以下错误。单击表单提交后会发生这种情况。任何人都可以帮助阐明这意味着什么以及如何解决它?
错误消息
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 :(得分:1)
在我看来,提交表单的控制器操作的签名具有错误的Amount类型(它在您单击提交时发生)
答案 1 :(得分:1)
此错误消息的一个可能原因是,在提交表单后,模型的public IEnumerable<SelectListItem> Amounts { get; set; }
属性为null。在将POSTED模型发送到视图之前,请设置Amounts
属性的值:
model.Amounts = GetAmounts();
Html.DropDownListFor()
抛出此异常
selectList
参数为null时的辅助方法。如果selectList
参数为null,则辅助方法尝试通过属性表达式(selectList
)的名称从ViewData获取m => m.Amount
参数的项,即{{1 }} 这里。它将从ViewData中的名称Amount
获取值,它的类型为Amount
,但它需要String
类型。