6

これについて多くの質問を見てきましたが、本当に必要な答えを得たことはありません。

かなり大きな Web アプリケーションを Web フォームから MVC に変換していますが、しばらくするとビューにデータを渡す際に問題が発生しました。アクションでは、次のコードを実行します。

//This is just an example ViewData["QProducts"] = from p in db.Products select new{Name = p.Name, Date = p.ToShortDateString() } ViewData["QUsers"] = from u in db.Users select u;

次のように、foreach ループを使用して、html 内のオブジェクトを反復処理します。

foreach(var q in (IEnumerable)ViewData["QEvents"])
{ 
    /*Print the data here*/
}

MVC を使用する前は を使用していましasp:Repeaterたが、これは MVC であるため、ASP.NET コントロールを使用できません。

このデータをビューに渡すにはどうすればよいですか? ここで匿名型を使用しないという選択肢はありません。<%#ViewData.Eval()%>明らかにうまくいきません。

何か案は?

4

6 に答える 6

15

匿名タイプではなく、名前と日付を保持するタイプを作成します。

public class NameDate
{
  public string Name { get; set; }
  public DateTime Date { get; set; }
}

次に、それをLinqクエリで使用します。

from p in db.Products select new NameDate { Name = p.Name, Date = p.Date }

ビューを強く入力してからMyView<IEnumerable<NameDate>>foreach ( var nameDate in ViewData.Model )...

于 2009-01-04T00:52:59.133 に答える
1

明示的にリストに変換し、ViewDataをキャストすることを検討してください。

ViewData["QUsers"] = (from u in db.Users select u).ToList();

foreach(Users u in (List<Users>)ViewData["QUsers"]){ 

    /*Print the data here*/

}

上記のようにViewDataを使用するか、TempDataを使用してアクション間で渡すなど、いくつかの方法でデータを渡すことができます。ViewData.Modelを使用して、強く型付けされたモデルを含めることもできます。ビューの定義を次のように変更する必要があることに注意してください。

ViewPage<User>

優れたリピーターの交換については、http://www.codeplex.com/MVCContribを試してください。彼らは役立つかもしれないグリッドHTMLヘルパーを持っています。

于 2009-01-04T00:14:53.720 に答える
0

MVCのRouteValueDictionaryを使用することはできませんか?

于 2010-10-27T13:17:55.373 に答える
0

あなたが探しているのは ViewModel だと思います: http://msdn.microsoft.com/en-us/vs2010trainingcourse_aspnetmvc3fundamentals_topic7.aspx

于 2012-11-20T07:52:30.373 に答える