C# 验证不可见
我有一个联系表格,用户可以联系我。它是用asp.NETMVC编写的,但问题是在提交后没有填写任何文本框,文本框上没有验证 这是我的表格:C# 验证不可见,c#,asp.net-mvc-4,C#,Asp.net Mvc 4,我有一个联系表格,用户可以联系我。它是用asp.NETMVC编写的,但问题是在提交后没有填写任何文本框,文本框上没有验证 这是我的表格: @using (Html.BeginForm("contact","Home", FormMethod.Post, new { @enctype = "multipart/form-data" })) { @Html.AntiForgeryToken() @Html.ValidationSummary(t
@using (Html.BeginForm("contact","Home", FormMethod.Post, new { @enctype = "multipart/form-data" }))
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
<section id="contact" class="text-center">
<div class="container">
<div class="row">
<div class="col-md-12 wow fadeInDown" data-wow-delay="2000">
<h3>CONTACT Microrout.nl</h3>
</div>
<div class="col-md-2"></div>
<div class="col-md-8">
Microrout.nl
<br />frederik hendriklaan 253-b
<br />Den Haag
<br />0641697144
</div>
<div class="col-md-2"></div>
<hr />
<div class="form-group">
<div class="col-md-10">
@Html.TextBoxFor(m => m.FromName, new {placeholder = "Your Name", @class = "form-control" })
@Html.ValidationMessageFor(m => m.FromName)
</div>
</div>
<div class="form-group">
<div class="col-md-10">
@Html.TextBoxFor(m => m.subject, new {placeholder = "Subject of message", @class = "form-control" })
@Html.ValidationMessageFor(m => m.subject)
</div>
</div>
<div class="form-group">
<div class="col-md-10">
@Html.TextBoxFor(m => m.FromEmail, new {placeholder ="Your email", @class = "form-control" })
@Html.ValidationMessageFor(m => m.FromEmail)
</div>
</div>
<div class="form-group">
<div class="col-md-10">
@Html.TextAreaFor(m => m.Message, new {placeholder = "Your message", @class = "form-control" })
@Html.ValidationMessageFor(m => m.Message)
</div>
</div>
<div class="form-group">
<div class="col-md-3">
<input type="submit" value="SHOOT MESSAGE" class="form-control">
</div>
</div>
</div>
</div>
@*<div class="google_map">
<div id="map-canvas"></div>
</div>*@
</section>
}
</section>
我正在使用smoothScroll导航,如下所示:
public ActionResult Contact()
{
EmailFormModel model = TempData["EmailFormModel"] as EmailFormModel;
ViewBag.Message = "Your contact page.";
return View();
}
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Contact(EmailFormModel model)
{
TempData["EmailFormModel"] = model;
string message2 = "There are a few errors";
if (ModelState.IsValid)
{
var body = "<p>Email From: {0} ({1})</p><p>Message:</p><p>{2}</p>";
var message = new MailMessage();
message.To.Add(new MailAddress("nengelen@online.nl")); //replace with valid value
message.Subject = model.subject;
message.Body = string.Format(body, model.FromName, model.FromEmail, model.Message);
message.IsBodyHtml = true;
using (var smtp = new SmtpClient())
{
await smtp.SendMailAsync(message);
}
return new RedirectResult(Url.Action("") + "#contact");
}
if (Request.IsAjaxRequest())
{
return new JsonResult { Data = new { succes = true, message = message2 } };
}
TempData["Message"] = message2;
return View(model);
}
<div class="collapse navbar-collapse">
<ul class="nav navbar-nav navbar-right">
<li><a href="#home" class="smoothScroll">HOME</a></li>
<li><a href="#about" class="smoothScroll">STUDIO</a></li>
<li><a href="#team" class="smoothScroll">TEAM</a></li>
<li><a href="#service" class="smoothScroll">SERVICES</a></li>
<li><a href="#work" class="smoothScroll">WORK</a></li>
<li><a href="#pricing" class="smoothScroll">PRICING</a></li>
<li><a href="#contact" class="smoothScroll">CONTACT</a></li>
@*<li>@Html.ActionLink("Contact", "Contact", "Home")
</li>*@
</ul>
</div>
[HttpGet]
public ActionResult Contact(string uniqueUri)
{
EmailFormModel model = TempData["EmailFormModel"] as EmailFormModel;
//ViewBag.Message = "Your contact page.";
return View(model);
}
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Contact(EmailFormModel model)
{
TempData["EmailFormModel"] = model;
string message2 = "There are a few errors";
if (ModelState.IsValid)
{
var body = "<p>Email From: {0} ({1})</p><p>Message:</p><p>{2}</p>";
var message = new MailMessage();
message.To.Add(new MailAddress("nengelen@online.nl")); //replace with valid value
message.Subject = model.subject;
message.Body = string.Format(body, model.FromName, model.FromEmail, model.Message);
message.IsBodyHtml = true;
using (var smtp = new SmtpClient())
{
await smtp.SendMailAsync(message);
}
return new RedirectResult(Url.Action("") + "#contact");
}
else
{
ModelState.AddModelError("ReviewErrors", "some error occured");
//return RedirectToAction("Create", new { uniqueUri = Request.RequestContext.RouteData.Values["uniqueUri"] });
return new RedirectResult(Url.Action("") + "#contact");
}
}
public ActionResult Contact()
{
EmailFormModel model = TempData["EmailFormModel"] == null ? new EmailFormModel() : (EmailFormModel)TempData["EmailFormModel"];
ViewBag.Message = "Your contact page.";
return View(model);
}
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Contact(EmailFormModel model)
{
TempData["EmailFormModel"] = model;
string message2 = "There are a few errors";
if (ModelState.IsValid)
{
var body = "<p>Email From: {0} ({1})</p><p>Message:</p><p>{2}</p>";
var message = new MailMessage();
message.To.Add(new MailAddress("nengelen@online.nl")); //replace with valid value
message.Subject = model.subject;
message.Body = string.Format(body, model.FromName, model.FromEmail, model.Message);
message.IsBodyHtml = true;
using (var smtp = new SmtpClient())
{
await smtp.SendMailAsync(message);
}
return new RedirectResult(Url.Action("") + "#contact");
}
else
{
ModelState.AddModelError("ReviewErrors", "some error occured");
//return RedirectToAction("Create", new { uniqueUri = Request.RequestContext.RouteData.Values["uniqueUri"] });
return new RedirectResult(Url.Action("") + "#contact");
}
}
但验证是不可见的
谢谢大家的努力。但我刚刚创建了一个新的联系人页面,现在它可以正常工作了。只是要弄清楚,在导航中有正确的链接,但我刚刚提出了一个新问题。我刚刚将DaWood标记为最佳解决方案,因为作为answare,您无法进行多次标记
谢谢大家 您丢失了:
if (!ModelState.IsValid)
{
return View(model);
}
您需要渲染带有问题的视图。然后,框架将拾取验证错误并显示它们。之后
if(ModelState.IsValid)
您的电话是:
return new RedirectResult(Url.Action("") + "#contact");
刷新页面并清除模型状态
如果您需要调用重定向结果,请点击此链接
或
您需要返回视图(模型)
以获取验证错误
if(ModelState.IsValid)
{
// ...........Other Code:
return new RedirectResult(Url.Action("") + "#contact");
}
if (Request.IsAjaxRequest())
{
return new JsonResult { Data = new { success = true, message = message2 } };
}
TempData["Message"] = message2;
return View(model);
编辑:
public ActionResult Contact()
{
EmailFormModel model = TempData["EmailFormModel"] == null ? new EmailFormModel() : (EmailFormModel) TempData["EmailFormModel"];
ViewBag.Message = "Your contact page.";
return View(model);
}
当模型状态无效时,需要添加else。并将您的返回移动到if中,以便当模型状态有效时,您返回到模型的肯定检查中。当模型状态无效时,将返回视图,这将保留模型状态数据
if (ModelState.IsValid)
{
var body = "<p>Email From: {0} ({1})</p><p>Message:</p><p>{2}</p>";
var message = new MailMessage();
message.To.Add(new MailAddress("nengelen@online.nl")); //replace with valid value
message.Subject = model.subject;
message.Body = string.Format(body, model.FromName, model.FromEmail, model.Message);
message.IsBodyHtml = true;
using (var smtp = new SmtpClient())
{
await smtp.SendMailAsync(message);
}
message2 = "Thanks! We'll get back to you soon.";
//Response.Write("Error sending email: " + error.Message + "<br /> StackTrace: " + error.StackTrace);
//ViewBag.Message = "Thank you for contact us";
//return new RedirectToActionAnchor("Contact", "", "#contact");
TempData["Message"] = message2;
if (Request.IsAjaxRequest())
{
return new JsonResult { Data = new { success = true, message = message2 } };
}
return new RedirectResult(Url.Action("") + "#contact");
}
else
{
return View();
}
if(ModelState.IsValid)
{
var body=“电子邮件发件人:{0}({1})消息:{2}”;
var message=new MailMessage();
message.To.Add(新邮件地址(“nengelen@online.nl“”);//替换为有效值
message.Subject=model.Subject;
message.Body=string.Format(Body,model.FromName,model.FromEmail,model.message);
message.IsBodyHtml=true;
使用(var smtp=new SmtpClient())
{
等待smtp.SendMailAsync(消息);
}
message2=“谢谢!我们很快会回复您的。”;
//响应。写入(“发送电子邮件时出错:+Error.Message+”
StackTrace:+Error.StackTrace);
//ViewBag.Message=“感谢您与我们联系”;
//返回新的RedirectToActionAnchor(“联系人”、“联系人”);
TempData[“Message”]=message2;
if(Request.IsAjaxRequest())
{
返回新的JsonResult{Data=new{success=true,message=message2};
}
返回新的重定向结果(Url.Action(“”+“#contact”);
}
其他的
{
返回视图();
}
此外,如果模型无效,您可能希望启用内置客户端验证以保存到服务器的往返过程 您的if(Request.IsAjaxRequest())将永远不会被执行,但现在if()将不会被称为doops。编辑了我的回答Hi Truk,感谢您的编辑,但这里也有一个问题:return View()转到:,但是联系人的链接是:您只想返回帖子所来自的视图,以便用户可以看到验证消息。将
视图()
保留为空将返回与您所处的控制器操作同名的视图。如果要调用特定视图,可以显式地调用它,例如返回视图(“此处的视图名称”)
。此时,您不希望调用控制器操作,只返回带有错误消息的视图。如果调用该操作,它将返回一个不包含错误消息的新视图。昨天也有同样的问题,解决方案是,如果渲染时不使用If(!ModelState.IsValid),则加载初始值。好吧,我试过了。但是验证仍然不可见,如果(!modelState.IsValid),我会把它放在哪里?那之后呢?如果(ModelState.IsValid){}?问题是我不能返回视图(模型),因为联系人的url是:应该位于控制器操作方法的最顶端。不确定它在url段中的行为如何在POST方法中有什么if(Request.IsAjaxRequest())
?您是使用ajax提交表单(在这种情况下不会显示任何验证错误)还是进行正常提交?在提交建议不用于扩展讨论之后,它似乎正在进行完整的发布;这段对话已经结束。
if(ModelState.IsValid)
{
// ...........Other Code:
return new RedirectResult(Url.Action("") + "#contact");
}
if (Request.IsAjaxRequest())
{
return new JsonResult { Data = new { success = true, message = message2 } };
}
TempData["Message"] = message2;
return View(model);
public ActionResult Contact()
{
EmailFormModel model = TempData["EmailFormModel"] == null ? new EmailFormModel() : (EmailFormModel) TempData["EmailFormModel"];
ViewBag.Message = "Your contact page.";
return View(model);
}
if (ModelState.IsValid)
{
var body = "<p>Email From: {0} ({1})</p><p>Message:</p><p>{2}</p>";
var message = new MailMessage();
message.To.Add(new MailAddress("nengelen@online.nl")); //replace with valid value
message.Subject = model.subject;
message.Body = string.Format(body, model.FromName, model.FromEmail, model.Message);
message.IsBodyHtml = true;
using (var smtp = new SmtpClient())
{
await smtp.SendMailAsync(message);
}
message2 = "Thanks! We'll get back to you soon.";
//Response.Write("Error sending email: " + error.Message + "<br /> StackTrace: " + error.StackTrace);
//ViewBag.Message = "Thank you for contact us";
//return new RedirectToActionAnchor("Contact", "", "#contact");
TempData["Message"] = message2;
if (Request.IsAjaxRequest())
{
return new JsonResult { Data = new { success = true, message = message2 } };
}
return new RedirectResult(Url.Action("") + "#contact");
}
else
{
return View();
}