MVC DropDownList导致表单提交异常

时间:2012-04-29 18:41:36

标签: asp.net-mvc

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

2 个答案:

答案 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类型。