Asp.net mvc 如何在Asp.NETMVC中验证下拉列表

Asp.net mvc 如何在Asp.NETMVC中验证下拉列表,asp.net-mvc,validation,Asp.net Mvc,Validation,该月的列表已添加到数据库中。对于添加工资(创建操作),我必须从下拉列表中选择月份类型,如果未选择月份,则程序不必重定向到创建操作。在发送创建操作之前,如何验证下拉列表 @using(Html.BeginForm("Create","Talab",FormMethod.Post)) { <div class="row"> <div class="form-group"> <div class="col-md-2">

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

@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>
}

确保在模型上使用required

[Required]
public int id { get; set; }


指定范围属性

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

来源:

您的dropdownlist应该绑定到属性
month\u id
,该属性是
可空的
,但您没有使用
[必需的]
属性对其进行修饰。这是必须的

[Required(ErrorMessage="Please select a month")]
public Nullable<int> month_id { get; set; } 
旁注:您声称您使用的是视图模型,但事实上您并没有。您所展示的是一个数据模型。视图模型只包含与视图相关的属性,不应包含访问数据库的方法。提及

在您的情况下,视图模型是

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
}

另外,强烈建议您将代码格式化为干净的格式,以便人们能够快速准确地理解您正在做的事情!只需像其他输入一样使用RequiredAttribute。验证与下拉列表、文本框或您使用的任何输入都没有任何关系。它不起作用!我可以重定向到“创建操作”,而无需从下拉列表中选择任何值。如果我理解正确,您是否希望在下拉列表中未设置月份时禁用“创建”链接?然后你必须用javascript进行验证。是的!!确切地请对此场景提供帮助为什么在需要时将
id
设为空?如果是
int
,则默认情况下会添加
date val required
属性-始终需要类型为
int
的属性,因为它不能为空。除非您想使用
ErrorMessage=“someMessage”
覆盖默认错误消息,否则
[必需]
属性是不必要的。您的意思是填充
选择列表
?如果是这样,这正是您当前用来分配
ViewData[“monthType”]
的解决方案不会给出我的答案!!但是谢谢你你什么意思?我不会给你答案的。读第一段。您绑定到名为
month\u id
的属性,该属性可为空,但您没有必需的属性,因此您选择的任何内容(包括“-select a month--”选项)都是有效的。这是正确的答案!旁注只是指出了您应该如何做。@Html.DropDownListFor(model=>model.Month.id,model.MonthList,“--Select a Month--”选择一个月--“。。。月号在哪里??下拉列表与月\号无关。如果选择了月,则该月的id将复制到月\号,该月\号是工资的属性。否则,应禁用创建链接
[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)
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
}
@Html.DropDownListFor(m => m.month_id, Model.MonthList, "--Select a Month--")