Я пытаюсь воссоздать проект из этого учебника под названием «Начало ASP.NET MVC 4» Хосе Роландо Гуая. У меня есть небольшая проблема с проверкой данных с использованием аннотаций данных, которые являются частью System.ComponentModel.DataAnnotations
.Почему проверка Asp.net с использованием аннотаций данных не работает?
Это один из моих контроллеров.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using HaveYouSeenMe.Models;
using System.ComponentModel.DataAnnotations;
namespace HaveYouSeenMe.Controllers
{
public class MessageController : Controller
{
//
// GET: /Message/
[Required(ErrorMessage = "Please type your name")]
[StringLength(150, ErrorMessage = "You can only add upto 150 characters")]
[FullName(ErrorMessage = "Please type your full name")]
public string From { get; set; }
[Required(ErrorMessage = "Please type your email address")]
[StringLength(150, ErrorMessage = "You can only add upto 150 characters")]
[EmailAddress(ErrorMessage = "We don't recognize this as a valid email address")]
public string Email { get; set; }
[StringLength(150, ErrorMessage = "You can only add upto 150 characters")]
public string Subject { get; set; }
[Required(ErrorMessage = "Please type your message")]
[StringLength(1500, ErrorMessage = "You can only add upto 1500 characters")]
public string Message { get; set; }
public ActionResult Send()
{
return View();
}
[HttpPost]
public ActionResult Send(MessageModel model)
{
if (ModelState.IsValid)
{
return RedirectToAction("ThankYou");
}
ModelState.AddModelError("", "One or more errors were found");
return View(model);
}
public ActionResult ThankYou()
{
return View();
}
}
}
и это соответствующее представление для действия «Отправить».
@model HaveYouSeenMe.Models.MessageModel
@{
ViewBag.Title = "Send";
}
<h2>Send Message</h2>
@using (Html.BeginForm()) {
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
<fieldset>
<legend>MessageModel</legend>
<div class="editor-label">
@Html.LabelFor(model => model.From)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.From)
@Html.ValidationMessageFor(model => model.From)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Email)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Email)
@Html.ValidationMessageFor(model => model.Email)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Subject)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Subject)
@Html.ValidationMessageFor(model => model.Subject)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Message)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Message)
@Html.ValidationMessageFor(model => model.Message)
</div>
<p>
<input type="submit" value="Send Message" />
</p>
</fieldset>
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
Когда я запускаю свое приложение и делаю запрос/сообщение/отправить, я получаю это представление.
Теперь, если я нажму кнопку Отправить сообщение, я должен получить ошибки проверки, как это (по учебнику, а также то, что я хочу сделать).
Но я перенаправлены на страницу ThankYou
, которая в основном другое действие, которое я написал (Вы можете проверить мой MessageController выше). Так почему это происходит? Я точно следил за учебником, и я повторно проверил свой код несколько раз, но я не могу понять это.
P.S: Если для решения этой проблемы необходимы какие-либо подробности, скажите об этом, я уточню детали для моего вопроса.
Прежде всего, проверьте, имеют ли сгенерированные html атрибуты проверки "data-". –
Аннотации данных должны быть в классе модели, а не на контроллере. –
Я предполагаю, что вы отправили неправильный код. Эти свойства должны быть в 'class MessageModel', а не в' class MessageController' –