如何验证Asp .net MVC中的DropDown列表

时间:2015-08-08 15:57:00

标签: asp.net-mvc validation

月份列表已添加到数据库中。对于添加工资(创建操作),我必须从下拉列表中选择月份类型,如果未选择月份,则程序不必重定​​向以创建操作。如何在路由创建操作之前验证下拉?

@using(Html.BeginForm("Create","Talab",FormMethod.Post))
{ 
    <div class="row">
        <div class="form-group">
            <div class="col-md-2">
                <a href="@Url.Action("Create","TotalSalary")" class="btn btn-success input-sm">Add New </a>
            </div>
        </div>
        <div class="form-group">   
            <div class="col-md-2">
                @Html.DropDownListFor(model => model.Month.id,     (IEnumerable<SelectListItem>)ViewData["monthType"], "--Select a Month--")
                @Html.ValidationMessageFor(model => model.Month.id)
            </div>
        </div>
    </div>
}

我的视图模型具有以下属性

public class Salary
{
   public int id { get; set; }
   public Nullable<int> month_id { get; set; }

   [Required]
   public virtual Month Month { get; set; }

   public IEnumerable<Month> GetMonths()
   {
        IEnumerable<Month> mat = null;
        mat = this.db.Months.ToList();
        return mat;
   }

}
Public Class Month
{
    public int id { get; set; }
    public string month { get; set; }
    public virtual ICollection<Salary> Salary { get; set; }
}

我的控制器动作索引

public ActionResult Index()
    {
        Salary salary = new Salary();
        ViewData["monthType"] = salary .GetMonths().ToList().Select(
                 s => new SelectListItem
                 {
                     Text = s.month,
                     Value = s.id.ToString()
                 });

        return View(salary);
    }

3 个答案:

答案 0 :(得分:2)

您的下拉列表应绑定到month_id的属性Nullable<int>,但您没有使用[Required]属性进行装饰。它必须是

[Required(ErrorMessage="Please select a month")]
public Nullable<int> month_id { get; set; } 

并在视图中

@Html.DropDownListFor(m => m.month_id, ....)
@Html.ValidationMessageFor(m => m.month_id)

旁注:您声称使用的是视图模型,但事实上您不是。您展示的是数据模型。视图模型仅包含与视图相关的属性,并且永远不应包含访问数据库的方法。请参阅What is ViewModel in MVC?

您案例中的视图模型将是

public class SalaryViewModel
{
  public int id { get; set; }
  [Required(ErrorMessage="Please select a month")]
  [Display(Name = "Month")] // for use in @Html.LabelFor()
  public Nullable<int> month_id { get; set; }
  public SelectList MonthList { get; set; } // or IEnumerable<SelectListItem> MonthList
}

在控制器中填充MonthList属性并在视图中将其用作

@Html.DropDownListFor(m => m.month_id, Model.MonthList, "--Select a Month--")

答案 1 :(得分:1)

答案 2 :(得分:1)

指定范围属性

[Required]
[Range(1, 12, ErrorMessage="Please select a value")]
public int Id { get; set; }

来源:MVC3 validation with data-annotation?