【问题标题】:Simple Validation for dropdownlist in mvc using (Html.ValidationMessage)使用 (Html.ValidationMessage) 对 mvc 中的下拉列表进行简单验证
【发布时间】:2011-07-11 13:59:51
【问题描述】:

控制器

var productList = Enumerable.Range(1, 80).Select(
    x => new SelectListItem { Value = x.ToString(), Text = x.ToString() }
);
ViewData["products"] = new SelectList(productList.ToList(), "Value", "Text");

查看

<%: Html.DropDownList("products", ViewData["products"] as SelectList, "--select--")%>
<%: Html.ValidationMessage("products", "Please Select the Product from the List")%> 
//This doesnt works on (ModelState.IsValid) I know the dropdown list data is coming
//from the view data not model , thats why model doesnt validate the particular dropdown 
//list while it validates other fields which are linked to model,
//Just want to know, how can i validate the above dropdownlist 

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-2 validation asp.net-mvc-3


    【解决方案1】:

    您将 ddl 的名称和值都绑定到 products。那是错误的。当然,这是您的代码问题最小的问题。更大更严重的问题是您使用 ViewData 而不是使用强类型视图和视图模型。

    所以有两种可能:

    1. 最糟糕的是:在您的视图模型上有一个属性,您可以将下拉值绑定到该属性。

      [Required(ErrorMessage = "Please Select the Product from the List")]
      public string SelectedProduct { get; set; }
      

      然后将此属性名称用作弱类型 DropDownList 助手的第一个参数,并将 ViewData 作为第二个参数:

      <%= Html.DropDownList( 
          "SelectedProduct", 
          ViewData["products"] as SelectList, 
          "--select--"
      ) %>
      <%= Html.ValidationMessage("SelectedProduct") %>
      
    2. 正确的方法:当然是使用真实的视图模型(我厌倦了重复它,只是谷歌,你会得到像gazillions of answers,就在我身边,就在这个主题的这个网站上)。它看起来像这样:

      <%: Html.DropDownListFor( 
          x => x.SelectedProduct, 
          Model.Products, 
          "--select--"
      ) %>
      <%= Html.ValidationMessageFor(x => x.SelectedProduct) %>
      

    【讨论】:

    • 是的,我知道我一直在使用视图模型,我正在为所有其他字段使用模型,但是这个产品来自不同的表并且值是硬编码的,因此我正在通过视图数据然后将其保存到另一个表。
    • @Mr A,你为什么说桌子?这与数据的来源完全无关:表格、XML 文件、其他 Web 服务、Facebook 帐户……这并不重要。这就是为什么您有一个视图模型 => 以便聚合您的视图所需的所有数据。因此,只需使用映射层将您的域对象转换为一个单一且干净的视图模型,并以正确的方式做事。
    • 是的,我已经看到了正确的做法,这是您第 10 次或第 11 次告诉我使用视图模型,但问题是我正在网站完成中我需要尽快发布它,一旦完成,我将使用正确的方式重构整个网站.. 我当时得到了这个网站,当时我对 mvc 一无所知
    • +1 @Darin Dimitrov - 使用 gazillions 并多次重复您关于使用视图模型的明智建议
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多