10

オブジェクトのリストがContactあり、そこから属性のサブセットが必要です。そこで、LINQプロジェクションを使用して匿名リストを作成し、それを部分ビューに渡しました。しかし、そのリストを部分ビューで使用すると、コンパイラーはそれらの属性を持っていないと言います。次のように最も単純なケースを試しましたが、それでも部分ビューで匿名オブジェクトまたはリストを使用する機会がありません。

var model = new { FirstName = "Saeed", LastName = "Neamati" };
return PartialView(model);

そして部分的なビューの中で、私は持っています:

<h1>Your name is @Model.FirstName @Model.LastName<h1>

ただし、@ModelにはFirstNameプロパティとLastNameプロパティがないということです。ここで何が問題になっていますか?@Modelを使用すると、この文字列はブラウザでレンダリングされます。

 { Title = "Saeed" }
4

2 に答える 2

17

これをしないでください。ビューに匿名オブジェクトを渡さないでください。それらのプロパティは内部にあり、他のアセンブリには表示されません。ビューは、ASP.NETランタイムによって個別の動的アセンブリに動的にコンパイルされます。したがって、ビューモデルを定義し、ビューを強く入力します。このような:

public class PersonViewModel
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

その後:

var model = new PersonViewModel 
{ 
    FirstName = "Saeed", 
    LastName = "Neamati" 
};
return PartialView(model);

そしてあなたの見解では:

@model PersonViewModel
<h1>Your name is @Model.FirstName @Model.LastName<h1>
于 2011-07-03T08:22:12.120 に答える
1

リフレクションを使用して値を取得します。パフォーマンスは少し遅くなりますが、不要なモデルを作成する必要はありません。

アプリケーションに次のクラスを追加します

public class ReflectionTools
{
    public static object GetValue(object o, string propName)
    {
        return o.GetType().GetProperty(propName).GetValue(o, null);
    }
}

ビューで次のコードを使用します

            @(WebUI.Tools.ReflectionTools.GetValue(Model, "Count"))

お役に立てば幸い

于 2013-11-08T13:15:09.847 に答える