【问题标题】:Validation in MVCMVC 中的验证
【发布时间】:2014-02-13 16:08:37
【问题描述】:

我正在使用 MVC 3 asp.net 和 Razor,如何在客户端验证这些下拉框?就像如果没有选择将错误传递给请选择值的用户的值。 我已将 linq 添加到自动生成东西的 sql 类中

@using (Html.BeginForm("Generated_PaySlip", "Home", FormMethod.Get))
{
    <fieldset>
         Months
         @Html.DropDownList("Month", "Select Date")
         &nbsp &nbsp

         Employee Name
         @Html.DropDownList("EmplID", "Select Name")
         &nbsp &nbsp
         <input type="submit" value="Submit" />
   </fieldset> 
}

控制器:

public ActionResult InfoFor_PaySlip() 
{
    var dates = (from ps in DataContext.MonthlyRecords select new {ps.Month }).Distinct();
    ViewData["Month"] = new SelectList(dates, "Month", "Month");

    var names = (from n in DataContext.HrEmployees select new { n.EmplID, n.EmplName }).Distinct();
    ViewData["EmplID"] = new SelectList(names, "EmplID", "EmplName");

    return View();
 }

【问题讨论】:

    标签: c# asp.net-mvc asp.net-mvc-3 razor jquery-validate


    【解决方案1】:

    您可以使用javascript获取选定的值:

    var dropdown = document.getElementById("YourDropdown");
    var selectedValue = dropdown.options[dropdown.selectedIndex].value;
    

    在此之后,您可以使用 selectedValue 来检查用户选择的值是否有效。

    但是,我不建议这样做。最好使用 Asp.net MVC 提供的工具。 首先,您应该创建一个模型来托管您需要显示下拉列表的属性,并在此模型中使用数据注释(可以在此处找到初学者的简单指南:http://msdn.microsoft.com/en-us/library/ee256141(v=vs.100).aspx)来验证其值。例如:

    public class YouModel{
    
      [Display(Name = "Month")]
      [Required(ErrorMessage = "This field is required")]
      public String SelectedMonth {get; set;}
      public List<SelectListItem> Months {get; set;}
    
      [Display(Name = "Employee Name")]
      [Required(ErrorMessage = "This field is required")]
      public int SelectedEmployee {get; set;}
      public List<SelectListItem> EmployeeList {get; set;}
    }
    

    在你看来,你会:

    @using location.of.YouModel
    
    @using (Html.BeginForm("Generated_PaySlip", "Home", FormMethod.Get))
    {
      <fieldset>
          @Html.LabelFor(m => m.SelectedMonth)
          @Html.DropDownListFor(m => m.SelectedMonth, Model.Months)
          @Html.ValidationMessageFor(m => m.SelectedMonth)
    
          @Html.LabelFor(m => m.SelectedEmployee)
          @Html.DropDownListFor(m => m.SelectedEmployee, Model.EmployeeList)
          @Html.ValidationMessageFor(m => m.SelectedEmployee)
    
          <input type="submit" value="Submit" />
      </fieldset>
    }
    

    最后,在您的控制器中,您的操作将如下所示:

    public ActionResult Generated_PaySlip(YourModel model){
    
    // The ModelState.isValid will verify if your model is validated based on the data Anotations you used in the model. If not, will return false and you just have to return the model to the view you want and the framework will do the job of displaying the validation messages.
      if (ModelState.isValid){
        // do something
      }
      return View(model);
    }
    

    更新

    public ActionResult InfoFor_PaySlip() 
    {
        YourModel model = new YourModel();
    
        var dates = (from ps in DataContext.MonthlyRecords select new {ps.Month }).Distinct();
        model.Months = new SelectList(dates, "Month", "Month");
    
        var names = (from n in DataContext.HrEmployees select new { n.EmplID, n.EmplName }).Distinct();
        model.EmployeeList = new SelectList(names, "EmplID", "EmplName");
    
        return View(model);
    }
    

    【讨论】:

    • 好的,但我正在使用 LINQ TO SQL,它会影响它吗?喜欢模特?
    • 不,您应该能够继续在控制器逻辑中使用 LINQ。
    • 我更新了我的答案以展示如何继续使用 LINQ。
    猜你喜欢
    • 2011-07-31
    • 2012-11-19
    • 1970-01-01
    • 1970-01-01
    • 2010-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多