月份列表已添加到数据库中。对于添加工资(创建操作),我必须从下拉列表中选择月份类型,如果未选择月份,则程序不必重定向以创建操作。如何在路由创建操作之前验证下拉?
@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);
}
答案 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)
确保在模型上使用required。
[Required]
public int id { get; set; }
答案 2 :(得分:1)
指定范围属性
[Required]
[Range(1, 12, ErrorMessage="Please select a value")]
public int Id { get; set; }