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

助手不支持以下 lambda 表达式:

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

仅支持简单的属性访问表达式。

正确的方法是在视图模型上定义一个 Cid 属性,该属性将保存下拉列表中选定的国家 ID:

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 回答