ASP.NET MVC3: сводка проверки для действия «Создать» (проверка на стороне сервера) - PullRequest
1 голос
/ 19 февраля 2012

У меня есть класс сотрудника в модели для ASP.NET MVC3. Есть поле с именем «EmpName». Существует действие создания для создания записей сотрудников. Должна быть проверка на стороне сервера: вторая буква имени должна быть «E», а третья буква имени - «F». (Нет проверки на стороне клиента). Если проверка не удалась, сообщение должно отображаться в представлении создания как сводка проверки. Как мы это делаем?

Примечание. Ожидается, что ошибки валидации для этих двух валидаций станут результатом двух ошибок (две разные строки).

Примечание: я не использую Entity Framework

Ниже приведен код вида.

@model MyApp.Employee
@{  ViewBag.Title = "Create";  }   
<h2>Create</h2>    
@using (Html.BeginForm()) 
{    
    <div >          EmpName :~: @Html.EditorFor(model => model.EmpName)  </div>      

CONTROLLER

// GET:       
public ActionResult Create()      
{                      
   return View();      
}

// POST:
[HttpPost]      
public ActionResult Create(Employee emp)      
{          
if (ModelState.IsValid)          
{             
 //Save the employee in DB first and then redirectToAction.
            return RedirectToAction("Index");          
    }
}

ЧТЕНИЕ:

  1. ASP.NET MVC3: ValidationType ModelClientValidationRule

  2. Как DataAnnotations действительно работает в MVC?

  3. Проверка ASP.NET MVC 3 на стороне клиента с параметрами

  4. http://bradwilson.typepad.com/blog/2010/10/mvc3-unobtrusive-validation.html

  5. Добавление сортировки и поиска в приложении Contact Management ASP.NET MVC

  6. http://trainingkit.webcamps.ms/AspNetMvc.htm

  7. ValidationSummary и ValidationMessageFor с настраиваемым CSS, отображаемым при отсутствии ошибок

  8. http://www.devtrends.co.uk/blog/the-complete-guide-to-validation-in-asp.net-mvc-3-part-1

  9. Что является лучшим подходом к пользовательской проверке ASP.NET MVC 3.0

  10. http://dotnetslackers.com/articles/aspnet/Validating-Data-in-ASP-NET-MVC-Applications.aspx

Ответы [ 2 ]

2 голосов
/ 19 февраля 2012

Ваша модель может реализовать IValidatableObject (внутри System.ComponentModel.DataAnnotations namespace)

Ваша модель должна выглядеть примерно так:

public class Employee : IValidatableObject
{

    public string EmployeeName;


    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        char secondNameChar = EmployeeName[1];
        char thirdNameChar = EmployeeName[2];

        if (secondNameChar.ToString().ToLower() != "e")
            yield return
                new ValidationResult("Second char of name should be 'E'",
                                     new[] {"EmployeeName"});
        if (thirdNameChar.ToString().ToLower() != "f")
            yield return
                new ValidationResult("Third char of name should be 'F'",
                                     new[] {"EmployeeName"});


    }
}

Обратите внимание, что добавьте другие свойства сотрудника в этот класс и выполните проверку в методе Validate.

А теперь на контроллере, если вы вызываете ModelState.IsValid для недопустимого объекта, это завершается ошибкой и возвращает две ошибки и показывает их обе пользователю.

2 голосов
/ 19 февраля 2012

Вы можете добавить ошибки на стороне сервера, используя ModelState.AddModelError .Если ModelState содержит ошибки, то ModelState.IsValid будет ложным.

[HttpPost]      
public ActionResult Create(Employee emp)      
{         
if (YourServerValidation(emp) == false) 
{
    ModelState.AddModelError("EmpName", "Invalid value");
}

if (ModelState.IsValid)          
{             
    //Save the employee in DB first and then redirectToAction.
    return RedirectToAction("Index");          
}
else
{ 
    return View(emp);
}

Ваше представление должно быть обновлено следующим образом:

<div>
    EmpName :~: @Html.TextBoxFor(model => model.EmpName)
    @Html.ValidationMessageFor(model => model.EmpName)
</div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...