0

我正在尝试将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)
4

2 回答 2

1

在我看来,提交表单的控制器操作的签名的金额类型错误(它在您单击提交时发生)

于 2012-04-29T18:48:09.037 回答
1

此错误消息的一个可能原因是public IEnumerable<SelectListItem> Amounts { get; set; }您的模型的属性在提交表单后为空。在将 POSTED 模型发送到视图之前,设置Amounts属性的值:

 model.Amounts = GetAmounts();

当参数为 null时,此异常由Html.DropDownListFor() 辅助方法引发。selectList如果selectList参数为 null,则帮助方法尝试通过属性表达式 ( )selectList的名称从 ViewData 中获取参数的项目,该名称位于此处。它将通过ViewData 的名称获取值,它是 type ,但它需要 type 。m => m.AmountAmountAmountStringIEnumerable<SelectListItem>

于 2012-04-29T19:58:00.423 回答