私のモデルには2つのオブジェクト(リマインダーとユーザー)が含まれています。各アラームは1人のユーザーに関連付けられています。私は私が私のビューにデータを渡すために使うのviewmodelを定義したネストされたモデルによるViewModel検証
public class Reminder
{
[DisplayName("Subject")]
[Required(ErrorMessage = "{0}: error message.")]
[StringLength(200, ErrorMessage = "{0}: error message.")]
public string Name { get; set; }
[DisplayName("Supervisor")]
public User DepartmentSupervisor { get; set; }
}
public class User
{
[DisplayName("Username")]
[Required(ErrorMessage = "{0}: error message.")]
[StringLength(25, ErrorMessage = "{0}: lerror message.")]
public string Username { get; set; }
[DisplayName("Email")]
[StringLength(50, ErrorMessage = "{0}: error message.")]
[Email(ErrorMessage="Not valid.")]
public string Email { get; set; }
}
:
public class RemindersViewModel
{
public RemindersViewModel()
{
this.Supervisors = new List<SelectListItem>();
}
public Models.Reminder Reminder { get; set; }
public List<SelectListItem> Supervisors { get; set; }
}
監督は、私はコンボをレンダリングするために使用するユーザー(SelectListItem)の一覧です。
public ActionResult Edit(Guid id, Models.Reminder Reminder)
{
if (!ModelState.IsValid)
{
// PROBLEM.
}
}
すべてが正常に動作し、私がメールを表示する必要はありませんので、私は私のリマインダーは、選びだしのユーザー(ユーザー名)が、関連付けられている:私はフォームを送信すると
は、コントローラは、オブジェクトのリマインダーを再バインドドロップダウン、バインディングはフィールドを埋めることができないので、私のフォームに存在しません。 検証プロセスで、私が実際に望んでいないUserモデルを検証しようとするとエラーが発生します。 ネストされたモデルを扱う最善の方法は何ですか?
あなたのお返事ありがとうございます。あなたが理解できる限り、私のビューモデルを「平坦化」することを提案しますか?私のクラスの再作成者は、タイプUserではないDepartmentSupervisorプロパティを持っています...そうですか?例はありますか? – LeftyX
@vandalo、必ずしもフラットにする必要はありません。したがって、この特定のビューで作業するプロパティだけを含む 'ReminderViewModel'と' UserViewModel'をそれぞれ持つことができます。 ReminderViewModelには、UserViewModel型のプロパティがあります。 –
私は理解し始めています。自分のドメイン(エンティティ)クラスを持っていると思います。次に、バリデーションルールを使っていくつかの中間クラス(リマインダ、ユーザなど)を作成し、これらのクラスをViewModelにネストします。私が理解できるものとして、中間クラスを取り除き、エンティティ(ドメイン)とビューモデルを持つだけです。そうですか? – LeftyX