4
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 自体に注釈がないために発生しますか? これについて正式にどこで読むことができますか?私がオンラインで見つけることができたのは、ときどきブログを 1 つまたは 2 つ見つけただけですが、オンラインでは、このような他のオブジェクトと関係があるものではなく、単純なモデルについて言及しています。典型的な外国の主要国対人関係。

何か案は?

4

2 に答える 2

4

ビュー モデル RegisterViewModel には「単純な」プロパティはなく、MVC フレームワークは複雑なプロパティをレンダリングする方法を指定しない限りレンダリングしません。DisplayFor の表示テンプレートと EditorFor ヘルパーのエディター テンプレートを作成する必要があります。詳細については、 ASP.NET MVC 2 テンプレートを確認してください。別のリンク

EditorTemplates をフォルダーに配置する

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

RegisterModel.cshtml

@model RegisterModel

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

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

...
...

CityModel.cshtml

@model CityModel

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

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

CountryModel.cshtml

@model CountryModel

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

@Html.LabelFor(model => model.Name)
@Html.EditorFor(model => model.Name)
于 2011-08-16T21:46:31.113 に答える
0

ViewModel に注釈が必要であるという点で、あなたは正しいと思います。私の MVC プロジェクトでは、ViewModel に注釈を付けると、すべて正常に動作します。

View は Data Model について何も知らないことに注意してください。View Model のみを認識します。:-)

編集:

[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>

それは役に立ちますか?

于 2011-08-16T21:37:47.027 に答える