4

私のプロジェクトにはいくつかのモデルがあり、そのうちのいくつかは他のモデルと1:多くの関係があります。ユーザーにはプロファイルページがあり、これはいくつかの部分的なビューに分割されます。各ビューは、特定のモデルの特定の属性をグループ化/表現します。

たとえば、特定のモデルの10個のプロパティのうち5個を部分ビューで表示し、使用しているユーザーに表示されないプロパティをそのように保持したいHtml.HiddenFor場合

@Html.HiddenFor(x => x.IsInGroup)

これは、上記の単一エントリプロパティで機能します。5つの非表示のメンバー属性のうち、これらの1つがリストである可能性があります。を使用してリストを永続化できないことを理解していますHiddenFor。Mvc FuturesパッケージとHtml.Serializeヘルパー拡張機能に出くわしましたが、その使用方法が完全にはわからず、多くの優れた情報を見つけることができませんでした。

  • モデルがビューに渡されると、それに関連付けられているすべて(プロパティ、コレクション)にアクセスできるようになりますModel.Username。たとえば、で使用HiddenForしない場合Username、それはデフォルト値にリセットされることを意味しますか、それともnullになりますか?これはコレクションでも同じですか?
  • HiddenForユーザーに表示されないモデルのプロパティを永続化するための唯一の/最良の方法を使用していますか?
  • Html.Serializeユーザーに表示されないモデルのコレクションを永続化する唯一の方法を使用していますか?別のオプション?
  • 誰かが私が説明したのと同様の状況でコレクションを永続化する方法の簡単な例を提供/リンクできますか?
  • を使用する場合Html.Serialize、モデル全体をシリアル化する必要がありますか、それともコレクションをシリアル化するだけですか?

フィードバックをいただければ幸いです。

4

1 に答える 1

2

モデルからすべてのフィールド (非表示または非表示) を作成して、モデルのデータを「永続化」する必要はありません。コントローラーでは、データベースのレコードを更新するときに、必要なものだけを更新し、残りは影響を受けません。

これがあなたの製品モデルだとしましょう

class Product { 
    public int ID {get; set;}
    public string Name {get; set;} 
    public string Description {get; set;}
    public decimal Price {get; set;}
    public virtual ICollection<Category> Categories { get; set; }
}

ビューで名前と説明のみを編集したい場合は、それらのフィールドのみを配置し、残りをスキップできます (ID は非表示フィールドになります)。フォームが送信されると、コントローラーで、渡された ID で製品レコードを参照し、名前と説明をフォームから受け取ったものに更新できます。カテゴリと価格は影響を受けません。

これを行うためのやや簡単な方法は、編集不可能なプロパティを持たないビューに固有の ViewModel を使用することです。これを行う方法の詳細を説明するこの投稿を見つけました。

たくさんの非表示フィールドなしで成功するモデル編集

小規模なプロジェクトでは、どの種類のライブラリ (AutoMapper、InjectValues など) も使用しませんが、値を ViewModel から DB の実際のレコードにコピーする必要がある場所では、自分で行うことができます。

于 2013-03-11T18:12:46.963 に答える