我在我的网站中有两个角色:客户和供应商
现在当供应商正在进行注册时,我提供从下拉列表控件中选择类别的选项.Category可以如下:水管工,电气,裁缝,木匠等......
此类别已加载到下拉列表中,供应商可从中选择适当的类别。
[Required(ErrorMessage = "Please Select City")]
[DataMember]
public int CategoryId { get; set; }
我在我的注册页面上为供应商和客户提供了单选按钮选项。如果用户选择供应商,那么我显示类别下拉列表,如果用户选择客户,则我不显示此下拉列表。
因此,当用户提交表单时,这就是我在控制器上所做的事情:
[HttpPost]
public ActionResult Registration(UserDetailsModel _userDetails)
{
if(ModelState.IsValid)
{
}
else
{
//Error..
}
}
我的模特:
public class UserDetailsModel
{
[DataMember]
public int Id { get; set; }
[Required(ErrorMessage = "Please Enter Name")]
[DataMember]
public string Fullname { get; set; }
[Required(ErrorMessage = "Please Select City")]
[DataMember]
public int CategoryId { get; set; }
}
问题是当用户选择客户选项然后我得到的模型状态为假,因为在客户的情况下,categoryid将为空(因为我没有向客户显示类别下拉列表)。 / p>
那我如何解决这个问题?
任何帮助......
答案 0 :(得分:0)
添加新类别“none”并将其设为默认值。之后,你可以测试它......
答案 1 :(得分:0)
您需要为下拉列表设置默认选定值,如下所示 -
设置选中="选择"对于您希望成为默认选项。
<option value="0" selected="selected">
None
</option>
这将在隐藏时为控件选择默认值,并且对于下拉字段,modelstate将为true。
答案 2 :(得分:0)
向模型添加属性以指示用户是客户还是供应商,并应用foolproof [RequiredIf]
属性。如果UserType
的单选按钮的值为&#34;供应商&#34;,则如果没有&#34; City&#34;则会显示错误。已被选中。
public class UserDetailsModel
{
public int Id { get; set; }
[Required]
public string UserType { get; set; }
[Required(ErrorMessage = "Please Enter Name")]
[Display(Name = "Full name")]
public string Fullname { get; set; }
[RequiredIf("UserType", "Vendor", ErrorMessage = "Please Select City")]
[Display(Name = "City")]
public int? CategoryId { get; set; }
public SelectList CityList { get; set; } // suggest this rather than ViewBag
}
然后在视图中
@model UserDetailsModel
@using(Html.BeginForm())
{
@Html.RadioButtonFor(m => m.UserType, "Customer", new { id = "customer" })
@Html.Label("customer")
@Html.RadioButtonFor(m => m.UserType, "Vendor", new { id = "vendor" })
@Html.Label("vendor")
@Html.ValidationMessageFor(m => m.UserType)
@Html.LabelFor(m => m.UserName)
@Html.TextBoxFor(m => m.UserName)
@Html.ValidationMessageFor(m => m.UserName)
@Html.LabelFor(m => m.CategoryId)
@Html.DropDownListFor(m => m.CategoryId, Model.CityList, "-Please select-")
@Html.ValidationMessageFor(m => m.CategoryId)
<input type="submit" />
}
答案 3 :(得分:-1)
您必须将int
更改为int?
。
所以你最终得到了这段代码:
public int? CategoryId { get; set; }
所有值类型都会发生这种情况。
其他信息
当请求到达控制器时,模型绑定器将实例化一个新对象,因此CategoryId将被设置为0(它不能为空),因此Required属性不知道该0是否来自请求因此它总是有效的。这就是Nullable int?
将起作用的原因。