gpt4 book ai didi

asp.net - 一切就绪,但验证不起作用

转载 作者:行者123 更新时间:2023-12-05 01:25:24 24 4
gpt4 key购买 nike

项目:

  • ASP.NET 4.5.2
  • MVC 5
  • 流畅的验证
  • 没有数据库,没有后端

网络配置:

<appSettings>
<add key="webpages:Version" value="3.0.0.0" />
<add key="webpages:Enabled" value="false" />
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
</appSettings>

型号:

[Validator(typeof(ContactValidator))]
public class ContactViewModel {
[DisplayName("Name:")]
public string Name { get; set; }
[DisplayName("Phone:")]
[DataType(DataType.PhoneNumber)]
public string Phone { get; set; }
[DisplayName("eMail:")]
[DataType(DataType.EmailAddress)]
public string eMail { get; set; }
[DisplayName("Message:")]
public string Message { get; set; }
}

验证器:

public class ContactValidator : AbstractValidator<ContactViewModel> {
public ContactValidator() {
RuleFor(x => x.Name)
.NotEmpty().WithMessage("Please provide a name.")
.Length(2, 255).WithMessage("Please provide a name of some substantial length.");
RuleFor(x => x.Phone)
.NotEmpty().WithMessage("Please enter a valid 10-digit phone number.")
.Length(12, 12).WithMessage("Phone number must be in the form of &#8220;123-456-7890&#8221;")
.Matches(@"^\d{3}-\d{3}-\d{4}$").WithMessage("Phone number must be a valid 10-digit phone number with dashes, in the form of &#8220;123-456-7890&#8221;");
RuleFor(x => x.eMail)
.NotNull().WithMessage("Please provide an eMail address.")
.EmailAddress().WithMessage("Please provide a valid eMail address to recieve the download link at.");
RuleFor(x => x.Message)
.NotNull().WithMessage("Please provide a message.")
.Length(2, 4000).WithMessage("Please provide a message of some substantial length.");
}
}

Controller :

[HttpGet]
public ActionResult Contact() {
var model = new ContactViewModel() { };
return View(model);
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Contact(ContactViewModel model) {
if(ModelState.IsValid) {

return View("Index");
}
return View(model);
}

查看:

@using(Html.BeginForm()) {
@Html.AntiForgeryToken()
<ul><li>All fields are required.</li></ul>
<fieldset>
@Html.LabelFor(model => model.Name, htmlAttributes: new { @class = "control-label" })@Html.EditorFor(model => model.Name, new { htmlAttributes = new { @class = "form-control", maxlength = "255" } })
@Html.ValidationMessageFor(model => model.Name, "", new { @class = "text-danger" })
@Html.LabelFor(model => model.Phone, htmlAttributes: new { @class = "control-label" })@Html.EditorFor(model => model.Phone, new { htmlAttributes = new { @class = "form-control", maxlength = "12" } })
@Html.ValidationMessageFor(model => model.Phone, "", new { @class = "text-danger" })
@Html.LabelFor(model => model.eMail, htmlAttributes: new { @class = "control-label" })@Html.EditorFor(model => model.eMail, new { htmlAttributes = new { @class = "form-control", maxlength = "255" } })
@Html.ValidationMessageFor(model => model.eMail, "", new { @class = "text-danger" })
@Html.LabelFor(model => model.Message, htmlAttributes: new { @class = "control-label" })@Html.TextAreaFor(model => model.Message, new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.Message, "", new { @class = "text-danger" })
<label class="control-label">&nbsp;</label><button type="submit" value="Save" title="Save" class="btn btn-primary glyphicon glyphicon-send"></button>
</fieldset>
}

布局 View :

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Lawyer Case | @ViewBag.Title</title>
@Styles.Render("~/Content/bootstrap")
@Styles.Render("~/Content/lightbox")
@Styles.Render("~/Content/css")
@Scripts.Render("~/bundles/modernizr")
@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/jqueryval")
@Scripts.Render("~/bundles/bootstrap")
@Scripts.Render("~/bundles/inputmask")
@Scripts.Render("~/bundles/lightbox")
</head>
<body>
<div class="navbar navbar-blue navbar-fixed-top">
<div class="container">
<header class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<h1>@Html.ActionLink("Lawyer Case", "Index", "Home", new { area = "" }, new { @class = "navbar-brand" })</h1>
</header>
<nav class="navbar-collapse collapse">
<ul class="nav navbar-nav">
<li>@Html.ActionLink("Home", "Index")</li>
<li>@Html.ActionLink("Contact Us", "Contact")</li>
</ul>
</nav>
</div>
</div>
<main class="container body-content">
@RenderBody()
</main>
<footer class="container">
<hr />
<p>Site Contents &copy; @DateTime.Now.Year - Lawyer Case.<br />Site Design &amp; Development &copy; @DateTime.Now.Year - Eclipse Computing Ltd.</p>
</footer>
@RenderSection("scripts", required: false)
</body>
</html>

我把 @Scripts.Render("~/bundles/jqueryval") 放在哪里没关系,验证对客户端都不起作用 < strong>OR 服务器端。只是有点迷惑...

如果我只是点击表单上的“提交”而根本没有填写它,它应该让我返回到联系页面和表单,因为 ModelState.IsValid 应该 false,但显然不是——我得到的是索引页,它告诉我验证不是正确验证,因为表单为空 ModelState.IsValid = true。为什么,我不知道。

最佳答案

根据文档 here .

您需要配置与 MVC 的集成 - 通常在 Global.asax.cs

Application_Start()
FluentValidationModelValidatorProvider.Configure();

关于asp.net - 一切就绪,但验证不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36850041/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com