0

私の見解では次のとおりです。

<div class="editor-field">
   @Html.DropDownListFor(x => x.Subject, (IEnumerable<SelectListItem>) ViewBag.Clients)
</div>

これは私がビューを呼び出す方法です:

var list = new List<SelectListItem>
               {
                   new SelectListItem {Text = "Gas Order", Value = "delivery"},
                   new SelectListItem {Text = "Account Services", Value = "account"},
                   new SelectListItem {Text = "Service Call", Value = "service"},
                   new SelectListItem {Text = "Inquiry", Value = "inquiry"}
               };
ViewBag.Clients = list;

ビューを返します();

そして、これは私のモデルにあります:

[Required]
[StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
[DataType(DataType.Text)]
[Display(Name = "Subject")]
public string Subject { get; set; }

選択した値を返そうとしています。

画面のエラーが原因で画面をリロードすると、次のエラーが発生します。

キー 'Subject' を持つ ViewData アイテムはタイプ 'System.String' ですが、タイプ 'IEnumerable' である必要があります。

私はそれがこの行によるものだと仮定しています:

public string Subject { get; set; }

その場合、選択したアイテムをモデルに戻すにはどうすればよいですか?

4

1 に答える 1

1

画面のエラーで画面をリロードすると、このエラーが発生します...

ViewBag.Clients更新時に正しい値を持っていることを確認してください。

これが、使用を避けViewBag、ViewModel のみを使用する必要がある理由です。
関連するすべてのデータをそこに置きます。

于 2012-11-13T18:52:15.437 に答える