我即将完成我的第一个MVC网络应用程序,我非常感谢它教给我的东西,但我仍然无法想出一些小问题。
验证 所以在我的模型中我得到了这个:
[Required(ErrorMessage = "The email address is required")]
[EmailAddress(ErrorMessage = "Invalid Email Address")]
public string EmailAddress { get; set; }
但事情并非单一的注释正常。 https://i.imgur.com/WG9JBQ1.jpg 它显示我没有指定的错误(看起来更好)。但主要的问题是它从不检查字段是否为空(或者有5个以上的字符,甚至更好)。 我得到了jquery.validate.js,jquery.validate.unobtrusive.js和ClientValidationEnabled,UnobtrusiveJavaScriptEnabled都是真的。我无法弄清楚我在这里错过了什么。其他类型的字段也这样做。 我的控制器动作如下所示:
[HttpPost]
public ActionResult SaveEmail(EmailModel model)
{
if (ModelState.IsValid)
{
int x = 0;
string[] stringedIds = model.ParseIds.Split('/');
model.Id = Int32.TryParse(stringedIds[0], out x) ? x : 0;
model.Contact = Int32.TryParse(stringedIds[1], out x)? contactsManager.GetById(x) : null;
model.EmailType = emailTypesManager.GetById(model.EmailType.Id);
if (model.Contact != null)
{
EmailManager.Save(model);
}
}
return RedirectToAction("Details", "Contact",new { @id = model.Contact.Id } );
}
我选择了一种电子邮件的下拉菜单。它有点需要可以为空(你可以选择但不必)。我不知道如何做这项工作。使用当前的数据,它就像一个魅力,但它不是可空的。我无法弄清楚如何将新元素添加到列表中(在列表的第一位)并使其为'null'。 这就是填补它的原因:
@{
EmailTypes emailTypesManager = new EmailTypes();
IEnumerable<EmailTypeModel> emailTypes = emailTypesManager.GetAll().Select(x => (EmailTypeModel)x);
}
@Html.DropDownListFor(x => x.EmailType.Id, new SelectList(emailTypes, "Id", "Name", Model.EmailType.Id), new { @class = "no-borders-drop" })
@Html.ValidationMessageFor(x => x.EmailType.Name)
我认为改为..
@{
EmailTypes emailTypesManager = new EmailTypes();
IEnumerable<EmailTypeModel> emailTypes = emailTypesManager.GetAll().Select(x => (EmailTypeModel)x);
var list = new SelectList(emailTypes, "Id", "Name", Model.EmailType.Id);
}
@Html.DropDownListFor(x => x.EmailType.Id, list,"None" , new { @class = "no-borders-drop" })
@Html.ValidationMessageFor(x => x.EmailType.Name)
..让我更近了一步。
有人能指出我吗? 谢谢(:
更新1: 我刚刚意识到我在jQuery本身之前调用了jquery.validation。所以这解决了我的问题。验证工作现在但我仍然想知道如果它不是jquery.validation,那么图片上的验证是什么样的。
答案 0 :(得分:0)
[Required(ErrorMessage = "The email address is required")] [MinLength(5),ErrorMessage="User name can't be less than 5 characters"]
[MaxLength(20, ErrorMessage="User name can't be more than 20 characters")]
[EmailAddress(ErrorMessage = "Invalid Email Address")]
public string EmailAddress { get; set; }
@Html.DropDownListFor(x => x.EmailType.Id, list,"this is optional label" , new { @class = "no-borders-drop" })
如果选择第一个选项,则该值将为空。
要获取模型状态错误,请将以下代码放在if(ModelState.Isvalid){}
代码块
foreach (ModelState modelState in ViewData.ModelState.Values) {
foreach (ModelError error in modelState.Errors) {
DoSomethingWith(error);
}
}
在for循环中放置断点,在这里您可以找到您缺少的验证规则。
最好的方法是返回模型状态错误以查看return View(model);
在你的情况下,你可以做
if (!ModelState.IsValid)
{
//model state is not valid
return view(model);
}
else
{
//your code here
}