Как проверить свойства объекта MVC3 - PullRequest
1 голос
/ 24 февраля 2012

У меня следующий код, но проверка для пользовательского типа (UserDetails) не выполняется.Есть ли способ преодолеть эту проблему?Я знаю, что если я определю все свойства UserDetails внутри UserModel, он будет работать нормально.но мне нужно повторно использовать UserDetails

модель,

public class UserModel
{
    public string Something { get; set; }
    public UserDetails User { get; set; }
}

пользовательский объект,

public class UserDetails
{
    [Required]
    public string FirtstName { get; set; }  

    [Required]
    public string LastName { get; set; }

    [StringLength(50, ErrorMessage = "{0} can not be greater than {1} characters")]
    public string Address { get; set; }
}

View,

@Html.ValidationSummary(true)
@Html.TextAreaFor(model => model.UserDetails.Address , new { rows = "5", cols = "20"})
@Html.ValidationMessageFor(model => model.UserDetails.Address )
....

Ответы [ 3 ]

0 голосов
/ 24 февраля 2012

почему бы не создать свои собственные правила проверки.Вы можете использовать Ivalidatable Object.проверьте эту ссылку, у нее есть хорошее объяснение

  1. Asp.net Реализация корректного объекта
  2. Проверка в asp.net mvc3
0 голосов
/ 24 февраля 2012

Это только из-за идентификатора и имени элемента.например, в этом случае имя элемента управления FirtstName равно UserModel.FirtstName, а идентификатор - UserModel_FirtstName, поэтому в этом случае проверка на стороне клиента не будет выполняться.если вы хотите добавить проверку, вы должны добавить проверку клиента вручную.но вы можете проверить его на стороне сервера, используя ModelState.IsValid

if (!ModelState.IsValid)
{
    if( ModelState.IsValidField("UserDetails.FirstName"))
    {
        ModelState.AddModelError("UserDetails.FirstName", "Error in save");
    }
    ......
}

проверка на стороне клиента

$("form").validate({
    rules: {
        "UserDetails.FirstName": { required: true }
    }
});
0 голосов
/ 24 февраля 2012

Если вы говорите о проверке на стороне клиента - убедитесь, что ваш код представления помещен в блок

@using(Html.BeginForm(...))
{
    ...
}

, и у вас включена проверка на стороне клиента с чем-то вроде @{Html.EnableClientValidation(); }

Т.е.

@using (Html.BeginForm())
{
    @{ Html.EnableClientValidation(); }
    @Html.ValidationSummary(true, "Password change was unsuccessful")

    <fieldset>
        <legend>Change Password Form</legend>
        <ol>
            <li>
                @Html.LabelFor(m => m.OldPassword)
                @Html.PasswordFor(m => m.OldPassword)
                @Html.ValidationMessageFor(m => m.OldPassword)
            ..............

Что касается запуска проверки на стороне сервера - вы должны вызвать Model.IsValid в вашем действии

РЕДАКТИРОВАТЬ:

Просто что-то вспомнилиначе: попробуйте поместить атрибут [Required] attibute в свойство User в UserModel

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...