1

Jimmy Bogardsの投稿を読んで、モデルの表示方法について説明しました。私自身のプロジェクトでは、一度に表示する必要のある情報が非常に多い場所に出くわしました。すべてのフィールドが一度に表示されるフォームなどの入力が必要な画面。

したがって、ビューモデルは次のようになります。

public class FormViewModel
{
    public string field1 {get;set;}
    public int field2 {get;set;}
    public DateTime field3 {get;set;}
    public string field4 {get;set;}
    ...snip
    public string field50 {get;set;}
}

これで、フォームにセクションが含まれるようになったため、次のようにビューモデルに少し構造を導入できます。

public class FormViewModelSection1
{
    public string field1 {get;set;}
    public int field2 {get;set;}
}

public class FormViewModelSection2
{
    public DateTime field3 {get;set;}
    public string field4 {get;set;}
}

次に、メインビューモデルは次のようになります。

public class FormViewModel
{
    public FormViewModelSection1 {get;set;}
    public FormViewModelSection2 {get;set;}
}

したがって、より複雑なビューモデルをメインビューに戻します。メインビューは、基本的に、各セクションを委任して、次のようなレンダリング部分を介してレンダリングされます。

<div>
My form

<%: Html.RenderPartial("soemascx", Model.FormViewModelSection1)%>
</div>

または、editorforを使用してコンテンツをレンダリングすることもできます。

私の質問は、ビューモデルの「再構成」が有効なことなのか、それともビューモデルを非常にフラットにすることによって提供される利点のいくつかを元に戻すのかということです。

4

2 に答える 2

1

あなたの質問に対する正しい答えはないと思います。それはすべて使いやすさと機能性次第です。多分個人的なコーディングスタイルですら。ある限り意味

  • 作業中(表示、投稿、検証など)
  • 目的を果たします
  • 他の人が理解できる(読みやすい)

それは良い解決策だと考えてください。私が何をするかについて質問する場合:名前と検証のためによく装飾された1つのフラットクラス(データ注釈)、および視覚的表現をサポートする構造(コンボボックス、列挙型のリストなど)を使用します)ラジオボタン用。

注意として、私はビューモデルの階層(継承)でいくつかの悪い経験をしました-検証では本当にうまく機能していませんでした(継承されたデータ注釈はビューモデルの継承では期待どおりに機能しません)。

だからあなたの特定の質問に答えるために-いいえ、あなたは何も悪いことをしていません...それをどのように行うかはあなた次第です。

お役に立てれば。

于 2012-09-11T16:51:55.037 に答える
0

「UserControl」タイプのもののようなものでない限り、私は個人的にViewModelsを子ViewModelsに分割しません。たとえば、Webページの横にある小さなフォームは別のViewModelであり、メインページのViewModelはそれを参照します。

しかし、一般的に、私はすべての共有フィールド(ページタイトルなど)を持つ抽象クラスであるBaseViewModelを持っており、次にBaseViewModelを継承するビュー自体のViewModelを持っています。例:

public abstract class BaseViewModel
{
    public string PageTitle { get; set; }
    public string MetaDescription { get; set; }
    public string MetaKeywords { get; set; }
}

いくつかのページで使用する小さなサインアップフォームがあるかもしれません。したがって、この小さなフォーム用に別のViewModelを作成します。これを独自のオブジェクトに分離することの利点の1つは、ユーザーがフォームを送信するときに、すべてのエンティティを含むメインページではなく、特定のSignupViewModelオブジェクトを渡すことができることです。

public sealed class SignupViewModel
{
    [Required]
    public string YourName { get; set; }
    [Required]
    public string YourEmail { get; set; }
}

次に、上記のユーザーコントロールを備えた基本的なWebページの場合:

public sealed class PageViewModel : BaseViewModel
{
    public string PageID { get; set; }
    public string PageContents { get; set; }
    public SignupViewModel UserSignupForm { get; set; }
}

同じことに取り組むにはいろいろな方法があると思いますが、これが私のやり方です。

于 2012-09-11T01:51:08.137 に答える