MVC3 Html.EditorFor не отображает ни одной вещи в моем представлении - PullRequest
4 голосов
/ 17 августа 2011
public class RegisterViewModel
{
    //Plain POCO Properties
    public RegisterModel RegisterModel { get; set; }

    //Meant to be used in SelectLists.
    public IEnumerable<CityModel> Cities { get; set; }
    public IEnumerable<CountryModel> Countries { get; set; }
}

Вот эти классы:

public class RegisterModel
{
    [Required]
    [Display(Name = "Usuario")]
    public string UserName { get; set; }

    [Required]
    [DataType(DataType.EmailAddress)]
    [Display(Name = "Correo")]
    public string Email { get; set; }

    [Required]
    [StringLength(100, ErrorMessage = "Su {0} debe tener al menos {2} caracteres.", MinimumLength = 6)]
    [DataType(DataType.Password)]
    [Display(Name = "Contraseña")]
    public string Password { get; set; }

    [DataType(DataType.Password)]
    [Display(Name = "Confirme Su Contraseña")]
    [Compare("Password", ErrorMessage = "Sus contraseñas no son las mismas.")]
    public string ConfirmPassword { get; set; }

    [Required]
    [Display(Name = "Nombre")]
    public string Nombre { get; set; }

    [Required]
    [Display(Name = "Apellido")]
    public string Apellido { get; set; }

    [Required]
    [Display(Name = "Direccion")]
    public string Address { get; set; }

    [Required]
    [Display(Name = "Telefono Fijo")]
    public string Telephone { get; set; }

    [Required]
    [Display(Name = "Celular")]
    public string MobilePhone { get; set; }

    [Required]
    [Display(Name = "Fecha de Nacimiento")]
    public DateTime DateOfBirth { get; set; }

    [Required]
    [Display(Name = "Soy:")]
    public bool Sex { get; set; }

    [Required]
    [Display(Name = "Carnet")]
    public int Carnet { get; set; }
}

public class CityModel
{
    [HiddenInput(DisplayValue = false)]
    public int CityId { get; set; }

    [Required]
    [Display(Name = "Ciudad")]
    public string Name { get; set; }      
}

public class CountryModel
{
    [HiddenInput(DisplayValue = false)]
    public int CountryId { get; set; }

    [Required]
    [Display(Name = "Pais")]
    public string Name { get; set; } 
}

И вот как я вызываю RegisterViewModel на мой взгляд:

@model Foodiggly.WebUI.Models.RegisterViewModel

@using (Html.BeginForm()) {
    @Html.ValidationSummary(true)
    <fieldset>
        <legend>RegisterViewModel</legend>

        @Html.EditorForModel()

        <p>
            <input type="submit" value="Create" />
        </p>
    </fieldset> 
}

Эта ошибка вызвана тем, что моя ViewModel сама не имеет никаких аннотаций? Где я могу официально прочитать об этом? Все, что мне удалось найти в Интернете, - это временный блог или два, но в Интернете упоминаются простые модели, а не те, которые связаны с другими объектами, такими как этот. Типичные отношения между человеком и иностранным ключом.

Есть идеи?

Ответы [ 2 ]

4 голосов
/ 17 августа 2011

Модель представления RegisterViewModel не имеет каких-либо «простых» свойств, а среда MVC не отображает сложные свойства, если мы не расскажем, как их отображать.Мы должны создать шаблоны отображения для DisplayFor и шаблон редактора для помощников EditorFor.Проверьте ASP.NET MVC 2 Шаблоны для подробностей.Другая ссылка .

Поместите шаблоны Editor в шаблоны

~/Views/Shared/EditorTemplates
or
~/Views/ControlerName/EditorTemplates

RegisterModel.cshtml

@model RegisterModel

@Html.LabelForFor(model => model.UserName)
@Html.EditorFor(model => model.UserName)

@Html.LabelForFor(model => model.Email)
@Html.EditorFor(model => model.Email)

...
...

CityModel.cshtml

@model CityModel

@Html.LabelForFor(model => model.CityId)
@Html.EditorFor(model => model.CityId)

@Html.LabelForFor(model => model.Name)
@Html.EditorFor(model => model.Name)

CountryModel.cshtml

@model CountryModel

@Html.LabelForFor(model => model.CountryId)
@Html.EditorFor(model => model.CountryId)

@Html.LabelForFor(model => model.Name)
@Html.EditorFor(model => model.Name)
0 голосов
/ 17 августа 2011

Я думаю, что вы правы в том, что ваша ViewModel должна иметь аннотации.В моем проекте MVC я аннотирую ViewModel, и все работает отлично.

Помните, что ваше представление вообще ничего не знает о вашей модели данных - оно знает только вашу модель представления.: -)

edit:

[DataMember]
public class User {
public string PhoneNumber 
{ ... }

}




//[ViewModel]
public class ViewUser  {

[Required, RegularExpression(@"^\(?(\d{3})\)?[- ]?(\d{3})[- ]?(\d{4})$", ErrorMessage="Please enter a valid 10 digit phone number")]
public string ViewPhoneNumber {
}

}


View page

<div class="editor-field">
     @Html.EditorFor(model => model.Phone1)
     @Html.ValidationMessageFor(model => model.Phone1, "Please enter a valid phone number")
</div>

Помогает ли это?

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