Модель не действует при проверке modelstate.функция IsValid
Модель недействительна, и я не могу понять, почему.
Модель находится ниже:
using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Threading.Tasks; namespace PTPA.Models { public class ContactUs { [Required] public string FirstName { get; set; } [Required] public string LastName { get; set; } [Required] [EmailAddress] public string Email { get; set; } [Required] public string Subject { get; set; } [Required] public string Message { get; set; } } }
Смотреть
А передний конец находится ниже:
@model PTPA.Models.ContactUs @{ ViewBag.Title = "ContactForm"; Layout = "~/Views/Shared/_Layout.cshtml"; } <h2>ContactForm</h2> <script src="~/lib/jquery-validation/dist/jquery.validate.min.js"></script> <script src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js"></script> <link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.min.css" /> <div> <div class="col-md-6"> <div> @if (ViewBag.Message == null) { <div> <form method="post"> <div class="form-group"> <label asp-for="FirstName">First Name</label> <input asp-for="FirstName" class="form-control" /> <span asp-validation-for="FirstName" class="text-muted"></span> </div> <div class="form-group"> <label asp-for="LastName">Last Name</label> <input asp-for="LastName" class="form-control" /> <span asp-validation-for="LastName" class="text-muted"></span> </div> <div class="form-group"> <label asp-for="Email">Email</label> <input asp-for="Email" class="form-control" /> <span asp-validation-for="Email" class="text-muted"></span> </div> <div class="form-group"> <label asp-for="Subject">Subject</label> <input asp-for="Subject" class="form-control" /> <span asp-validation-for="Subject" class="text-muted"></span> </div> <div class="form-group"> <label asp-for="Message">Message</label> <textarea rows="10" cols="10" asp-for="Message" class="form-control"></textarea> <span asp-validation-for="Message" class="text-muted"></span> </div> <div> <button type="Submit" class="btn btn-default"> Send Message </button> </div> </form> </div> } </div> <div> <div> @if (ViewBag.Message != null) { <div>@ViewBag.Message</div> } </div> </div> </div> </div> <div>END</div>
Класс контроллера добавлен MadMyche
using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Mail; using System.Web; using System.Web.Mvc; using PTPA.Models; namespace PTPA.Controllers { public class ContactController : Controller { // GET: Contact [HttpGet] public ActionResult ContactForm() { return View("ContactForm"); } //Post : Contact [HttpPost] public ActionResult ContactForm(ContactUs cu) { if (ModelState.IsValid) { try { MailMessage msg = new MailMessage { From = new MailAddress(cu.Email) }; msg.To.Add("donotreplyptpa@gmail.com"); var fromEmailPassword = "example"; msg.Subject = cu.Subject; msg.Body = "The following has been sent by a customer from the 'contact us' page. " + cu.Message; var smtp = new SmtpClient { Host = "smtp.gmail.com", Port = 587, EnableSsl = true, DeliveryMethod = SmtpDeliveryMethod.Network, UseDefaultCredentials = false }; smtp.Credentials = new System.Net.NetworkCredential("example@gmail.com", fromEmailPassword); smtp.Send(msg); ModelState.Clear(); ViewBag.Message = "Thank you for sending us your message, we value your response and aim to get back to you within 24 hours. Thank you."; } catch (Exception ex) { ModelState.Clear(); ViewBag.Message = $" Something went wrong {ex.Message}"; } } return View("ContactForm"); } public ActionResult Error() { return View("ContactForm"); } } }
Что я уже пробовал:
Я пробовал менять и рубить модель, но ничего не получалось, я новичок в этом и только практикую, так что любая помощь была бы очень кстати.
Обновление: Это те значения, которые используются
FirstName: Tom LastName: Allen Email: tomAllen@gmail.com Subject: TEST Message: TEST
MadMyche
Код контроллера был бы полезен вместе с введенными значениями
MadMyche
Когда вы увидите обновленный вопрос с этим кодом и данными, пожалуйста, удалите комментарий, чтобы сохранить его в чистоте
MadMyche
Откуда вы знаете, что состояние модели недействительно? Отладка, не отправка электронной почты, выдача ошибки?
Member 14063936
При отладке он не попадает в раздел "try", попадает в if, а затем ломается.
Richard Deeming
Используйте отладчик для проверки ModelState
словарь. Углубитесь в объект, и вы увидите список ошибок, который, надеюсь, даст вам ключ к разгадке.
Просмотр значений данных в DataTips в редакторе кода - Visual Studio | Microsoft Docs[^]