【发布时间】:2015-07-16 18:51:54
【问题描述】:
我有一个联系表,以便用户可以联系我。它是用asp.net mvc编写的,但问题是提交后没有填写任何文本框,texboxes没有验证。
这是我的表格:
@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>
这是我在控制器中的方法:
public ActionResult Contact()
{
ViewBag.Message = "Your contact page.";
return View();
}
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Contact(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);
}
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");
}
if (Request.IsAjaxRequest())
{
return new JsonResult { Data = new { success = true, message = message2 } };
}
TempData["Message"] = message2;
return new RedirectResult(Url.Action("") + "#contact");
}
我现在是这样的:
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);
}
这是模型:
public class EmailFormModel
{
[Required, Display(Name="subject")]
public string subject { get; set; }
[Required, Display(Name = "Your name")]
public string FromName { get; set; }
[Required, Display(Name = "Your email"), EmailAddress]
public string FromEmail { get; set; }
[Required]
public string Message { get; set; }
}
我用的是smoothScroll导航,像这样:
<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");
}
}
在调试模式下,如果我不填写字段,它会出现:
else
{
ModelState.AddModelError("ReviewErrors", "some error occured");
//return RedirectToAction("Create", new { uniqueUri = Request.RequestContext.RouteData.Values["uniqueUri"] });
return new RedirectResult(Url.Action("") + "#contact");
}
但验证不可见
感谢大家的努力。但我刚刚创建了一个新的联系页面,现在它可以正常工作了。只需要弄清楚导航中的正确链接,但我刚刚提出了新问题。我只是将 DaWood 标记为最佳解决方案,因为您不能将多个标记作为答案。
谢谢大家!!
【问题讨论】:
-
您的 POST 方法中有什么
if (Request.IsAjaxRequest())?您是使用 ajax 提交表单(在这种情况下不会显示验证错误)还是正常提交? -
提交后好像在做full post
标签: c# asp.net-mvc-4