Member 14063936 Ответов: 2

Модель не действует при проверке 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[^]

2 Ответов

Рейтинг:
2

Vincent Maverick Durano

Ошибка обычно означает, что ваш Model не соответствует требованиям, предъявляемым к валидации. В вашем примере, Ваш FirstName, LastName, Email, Subject и Message свойства украшены с помощью [Required] атрибут. Это означает, что эти значения не должны быть null и empty в противном случае ваше состояние if(ModelState.IsValid) будет false.

Чтобы убедиться, что ваша модель захватывает данные, я бы предложил вам использовать отладчик, установить точку останова на вашем компьютере. ContactForm Метод действия, а затем шаг в ваш код. Проверьте переменную cu и посмотрите, есть ли у всех свойств связанные с ним значения. Вот одна ссылка, которую вы можете использовать, чтобы начать работу с отладкой в Visual Studio: Научитесь отлаживать с помощью отладчика Visual Studio - Visual Studio | Microsoft Docs[^]


Рейтинг:
0

Sk Imad

Используйте свою HTMl-форму внутри этой BeginForm.

@using (Html.BeginForm("MethodName", "ControllerName", FormMethod.Post))
{
     
}