0

シンプルなテーブルと高度な検索フォームを含むページがあります。私はモデルに渡しList<Customers>ます:

View(List<Customers>);

では、検索フォームにデータを渡したり返したりする最良の方法は何ですか? 検証などを使用したいのですが、データを渡すViewDataのはお勧めできません。助言がありますか?

4

2 に答える 2

1

ビューに必要なすべてのデータを、そのビューに固有のモデルにラップする必要があります。これの利点は、最初は空の検索基準をモデルに含めることもできますが、検索が投稿されると、モデルに検索基準が自動的に含まれるため、結果を返すときに再ロードできることです。これは、投稿間でも状態を維持するのに役立ちます。

これにより、ビューのすべてのデータをタイプ セーフにViewDataすることもできます。

例えば:

public class CustomerSearchViewModel
{
    public List<Customer> Customers { get; set; }

    // your search criteria if you want to include it
    public string SearchFirstName { get; set; }
    public string SearchLastName { get; set; }
    public int SearchCustomerID { get; set; }
    // etc...
}

戻るとList<Customer>、投稿からモデルに検索基準が既に入力されているため、ビューはデフォルトで検索基準を対応するコントロールに戻すことができます (検索結果と検索入力コントロールが同じビューにあると仮定します)。

たとえば、あなたの投稿では、CustomerSearchViewModel. あとは、顧客のリストを取得してモデルに追加し、同じモデルを返すだけです。

// assuming you have accepted a CustomerSearchViewModel named model
model.Customers = GetCustomersForSearchCriteria(model.SearchFirstName,
    model.SearchLastName, model.SearchCustomerID);
return View(model);

モデル プロパティに検証属性を追加して、MVC に組み込まれている検証を利用することもできます。ViewDataこのデータを渡すために を使用していた場合、これは不可能です。

「次の男」も考慮する必要があります。ビューが必要とするすべてのデータが単一のクラスに配置されていると、よりクリーンになります。ViewDataこのようにして、コードが使用されているかどうか、実際にどのデータが渡されているかを確認するためにコードを探し回る必要がなくなります。

ViewDataは引き続きデータを渡すためのオプションですが、可能な限り使用を最小限に抑えるようにしています。

于 2010-08-18T18:05:28.900 に答える
0

アイテムのリストだけをビューに渡すのではなく、アイテムのリストと必要になる可能性のあるその他のデータを含むクラス、つまりViewModelを作成します。

public class CustomerSearchViewModel {
    public IEnumerable<Customer> Customers { get; set; }
    public string SearchTerm { get; set; }
}

.....

var viewModel = new CustomerSearchViewModel { 
                  Customers = customerList,
                  SearchTerm = searchTerm
                };

return View(viewModel);
于 2010-08-18T17:56:49.927 に答える