0

フォームを送信する前に、ユーザーがドロップダウンから値を選択していることを確認したいと思います。以下の私のコードを見てください。私は何が間違っているのですか?ありがとう

意見

  @model Store.Models.StoreDTO
      List<Store.Models.CountryDTO> countriesList= ViewBag.Countries;
            var countryItems = new SelectList(countriesList, "CId", "CName");

    @Html.DropDownListFor(x => x.Countries.SingleOrDefault().CId, @countryItems )
                     @Html.ValidationMessageFor(x=>x.Countries.SingleOrDefault().CId) 

    <input class="btn btn-info" type="submit" value="Search" />

ビューモデル

public class StoreDTO
{
public IEnumerable<CountryDTO> Countries { get; set;}
}

public class CountryDTO
{
    [DisplayName("CId")]
    [UIHint("DropDownList")]
    [Required(ErrorMessage = "Please select a Country")]
    public string CId { get; set; }
    [Required]
    public string CName { get; set; }
}
4

1 に答える 1

1

次のラムダ式は、ヘルパーではサポートされていません。

x => x.Countries.SingleOrDefault().CId

単純なプロパティ アクセス式のみがサポートされています。

これを行う正しい方法は、ドロップダウンから選択した国 ID を保持するビュー モデルで Cid プロパティを定義することです。

public class MyViewModel
{
    [DisplayName("CId")]
    [Required(ErrorMessage = "Please select a Country")]
    public string CId { get; set; }

    ...
}

次に、ビュー内でドロップダウンをこのスカラー プロパティにバインドします。

@Html.DropDownListFor(
    x => x.CId, 
    new SelectList((IEnumerable<Store.Models.CountryDTO>)ViewBag.Countries, "CId", "CName"),
    "-- SELECT --"
)
@Html.ValidationMessageFor(x => x.CId) 
于 2013-02-21T09:35:23.023 に答える