2

私はMVCにまったく慣れていません。interfaceモデルのプロパティとしてを使用しています。

私は自分Data Annotation Attributesが無視されていることに気づきました。フォームの送信中にもエラーが発生しました。

インターフェイスのインスタンスを作成できません。

カスタムを使用する必要があることがすぐにわかりましたModelBinder

CreateModelのメソッド内で何をする必要があるかを理解するのに苦労していますModelBinder

私は次のものを持っていますRegistrationModel

public class RegistrationModel
{
    #region Properties (8) 

    public string Email { get; set; }

    public string FirstName { get; set; }

    public Gender Gender { get; set; }

    public string LastName { get; set; }

    public string Password { get; set; }

    public string PasswordConfirmation { get; set; }

    public IPlace Place { get; set; }

    public string Username { get; set; }

    #endregion Properties 
}

IPlaceインターフェイスと実装は次のとおりです。

public interface IPlace
{
    #region Data Members (7) 

    string City { get; set; }

    string Country { get; set; }

    string ExternalId { get; set; }

    Guid Id { get; set; }

    string Name { get; set; }

    string Neighborhood { get; set; }

    string State { get; set; }

    #endregion Data Members 
}

public class Place : IPlace
{
    #region Implementation of IPlace

    public Guid Id { get; set; }

    [StringLength(100, ErrorMessage = "City is too long.")]
    public string City { get; set; }

    [StringLength(100, ErrorMessage = "Country is too long.")]
    public string Country { get; set; }

    [StringLength(255, ErrorMessage = "External ID is too long.")]
    public string ExternalId { get; set; }

    [Required(ErrorMessage = "A name is required.")]
    [StringLength(450, ErrorMessage = "Name is too long.")]
    [DisplayName("Location")]
    public string Name { get; set; }

    [StringLength(100, ErrorMessage = "Neighborhood is too long.")]
    public string Neighborhood { get; set; }

    [StringLength(100, ErrorMessage = "State is too long.")]
    public string State { get; set; }

    #endregion
}
4

1 に答える 1

2

ビュー モデルでインターフェイスと抽象型を使用しないようにする必要があります。したがって、あなたの場合、このビューモデルを使用するコントローラーアクションが、単にインターフェイスを置き換えるIPlaceよりも他の実装を持つことができない場合。Place

すでにわかっているように、何らかの理由でそれが必要な場合は、作成する実装を指定するカスタム モデル バインダーを作成する必要があります。ここに例があります。

于 2012-04-05T06:13:36.127 に答える