2014-10-23 2 views
1

У меня есть следующие модели:Как добавить ошибку ModelState для объекта внутри модели

class Identity 
{ 
    public string Name { get; set; } 
    public string Surname { get; set; } 
} 

class Person 
{ 
    public Identity Identity { get; set; } 
} 

Теперь я хочу, чтобы добавить ошибку модели проверки на фамилии в моем контроллере:

[HttpPost] 
public ActionResult CreatePerson(Person person) 
{ 
    // some validation stuff 
    ModelState.AddModelError("Identity.Surname", "Surname has not been found in BBDD"); 
          ^^^^^^^^^^^^^^^^ 
} 

Как я могу ссылаться на фамилию внутри объекта Identity, чтобы правильно отобразить ошибку проверки?

Я показываю ошибку проверки в представлении, как:

@Html.ValidationMessageFor(model => model.Identity.Surname) 

Но ошибка отображается в общем резюме проверки.

+0

Что имя свойства в классе 'Person' -' Public Identity WhatName {получить; задавать; } '! –

+0

Извините, это было неправильно, обновлено. –

+0

Тогда 'ModelState.AddModelError (« Identity.Surname »,« ...) »является правильным - если вы видите' @ Html.ValidationMessageFor (m => m.Identity.Surname) '. –

ответ

1

Вы можете попытаться реализовать атрибут Remote своей собственности. Это позволит вам выполнить проверку на стороне клиента с помощью ajax, чтобы проверить, что вы хотите на сервере. Вот documentation.

class Identity 
{ 
    public string Name { get; set; } 
    [Remote("CheckSurname", "Validation")] 
    public string Surname { get; set; } 
} 

public class ValidationController : Controller { 

    public JsonResult CheckSurname(string Surname) { 

     if(/*your busines logic*/) { 
      return Json(true, JsonRequestBehavior.AllowGet); 
     } 
     else { 
      return Json("Your error message here", JsonRequestBehavior.AllowGet); 
     } 

    } 
} 

в web.config вы должны включить это:

<appSettings> 
    <add key="ClientValidationEnabled" value="true" /> 
    <add key="UnobtrusiveJavaScriptEnabled" value="true" /> 
</appSettings> 
+0

Хорошее предложение, но ** не ответ ** на вопрос –

+0

@StephenMuecke просто еще один способ выполнить задачу ops. Он хочет страницу с ошибкой? Он может получить ее с помощью опубликовать форму. – aleha

+0

Он не отвечает на вопрос OP, который заключается в том, чтобы добавить ошибку ModelState в контроллер_ –

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