2016-07-21 2 views
0

Я пытаюсь воссоздать проект из этого учебника под названием «Начало 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") 
} 

Когда я запускаю свое приложение и делаю запрос/сообщение/отправить, я получаю это представление.

enter image description here

Теперь, если я нажму кнопку Отправить сообщение, я должен получить ошибки проверки, как это (по учебнику, а также то, что я хочу сделать).

enter image description here

Но я перенаправлены на страницу ThankYou, которая в основном другое действие, которое я написал (Вы можете проверить мой MessageController выше). Так почему это происходит? Я точно следил за учебником, и я повторно проверил свой код несколько раз, но я не могу понять это.

P.S: Если для решения этой проблемы необходимы какие-либо подробности, скажите об этом, я уточню детали для моего вопроса.

+0

Прежде всего, проверьте, имеют ли сгенерированные html атрибуты проверки "data-". –

+1

Аннотации данных должны быть в классе модели, а не на контроллере. –

+1

Я предполагаю, что вы отправили неправильный код. Эти свойства должны быть в 'class MessageModel', а не в' class MessageController' –

ответ

1

Возможно, вы неправильно прочитали образец.

Свойства, которые вы указали в MessageController, должны быть определены в классе модели - HaveYouSeenMe.Models.MessageModel - не в контроллере. И, вероятно, они уже определены там, но аннотаций нет.

Что вам нужно сделать, это переместить аннотации данных из контроллера в класс модели. Затем вы можете избавиться от свойств в контроллере, оставив только два последних метода.

Смежные вопросы