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

このエラーメッセージの考えられる原因の1つはpublic IEnumerable<SelectListItem> Amounts { get; set; }、フォームを送信した後、モデルのプロパティがnullであるということです。AmountsPOSTEDモデルをビューに送信する前に、プロパティの値を設定します。

 model.Amounts = GetAmounts();

この例外は、引数がnullのときにHtml.DropDownListFor() ヘルパーメソッドによってスローされます。引数がnullselectListの場合、ヘルパーメソッドは、ここにあるプロパティ式( )の名前でViewDataからパラメーターの項目を取得しようとします。ViewDataから名前で値を取得し、タイプはですが、タイプが必要です。selectListselectListm => m.AmountAmountAmountStringIEnumerable<SelectListItem>

于 2012-04-29T19:58:00.423 に答える
1

フォームが送信されるコントローラーアクションの署名の金額のタイプが間違っているように見えます(送信をクリックすると発生します)

于 2012-04-29T18:48:09.037 に答える