2012-05-07 19 views
2

私はMVCにはかなり新しく、問題を抱えていました。私はたくさんのGoogle検索を行ったが、解決策を見つけることができなかった。ASP.Net MVCの部分モデルのみを編集する

私は役割を持つASP.Netメンバーシップを使用しています。

  • 名前なし
  • カテゴリ私はこのように異なる役割キャブを実装するにはどうすればよいだけ

を許可すること

  • アート:

    は、私は属性を持つ製品のモデルを考えてみましょうオブジェクトの一部を編集するには? (例えば、1つのロールが商品のカテゴリを変更できないとしましょう)

    同じオブジェクトに対して同じモデルまたは異なるモデルに対して異なるビューを使用できますか?

    いくつかのプロパティを除外すると、それらを保存するとNULL値が返されます。 @HTML.HiddenFor(...)を使用しようとしましたが、これらのフィールドの検証に失敗しました。

  • 答えて

    3

    ViewModelはトリックを行うように聞こえます。最も些細なシナリオを除き、モデルとビューを密接に結合すると問題が発生します。

    以前に使用したことがない場合、ViewModelは、レンダリングしている特定のビューの単なるクラス(モデル)です。 ViewModelで必要なプロパティと検証をカスタマイズしてモデルにバインドすることで、構造の柔軟性と操作性が向上します。

    のviewmodels http://kazimanzurrashid.com/posts/asp-dot-net-mvc-viewmodel-usage-and-pick-your-best-pattern

    あなただけが特定の役割によって更新されることから財産を保護するために探している場合があなたが、その後、役割ごとにViewModelにを持つことができ

    EDITでの詳細なイントロがありますhtml入力を無効に設定し、カテゴリ値が依然として元の状態であることをサーバー上でテストするなどの他の解決策でなければなりません(Post要求を変更できるように常にこのようなテストを実行する必要があります)。

    +0

    私は柔道に同じ感謝を言うつもりだった。 2つの異なるViewModelが必要です。 –

    +0

    ありがとうございます。私はついにこれを手に入れました。 AutoMapperを使用して、ModelからViewModelに変換します。 まだ1つの問題があります。 ViewModelsの1つでは、「Name」プロパティーがありません。 Postにモデルを戻すとnullになります。 プロパティの名前としてNameを含める必要がありますか、Hiddenforフィールドをユーザーにするか、より良い方法がありますか。 ViewModelクラスで宣言されているフィールドのみを更新しますか? –

    +0

    あなたがプロパティを必要としない場合や、特にそれを変更したくない場合は、ViewModelから除外して、非公開フィールドに入れないようにしてください。これはPostリクエストで改ざんされる可能性があるからです。 Automapperのようなマッピングツールのほとんどはこれを処理できるはずですが、そうでない場合は手動でサーバー上で処理する必要があります。 – Judo

    関連する問題