我有一个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" }
解决方法
不要这样做不要将匿名对象传递给您的视图.它们的属性是内部的,在其他程序集中不可见.视图由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>