如何在ASP.NET MVC局部视图中使用匿名列表作为模型?

Sae*_*ati 10 asp.net-mvc anonymous-types viewmodel partialviews asp.net-mvc-3

我有一个Contact对象列表,我只想要一个属性的子集.所以我使用LINQ投影来创建一个匿名列表,然后将其传递给局部视图.但是当我在局部视图中使用该列表时,编译器说它没有那些属性.我尝试了最简单的情况如下,但我仍然没有机会在局部视图中使用匿名对象或列表.

var model = new { FirstName = "Saeed", LastName = "Neamati" };
return PartialView(model);
Run Code Online (Sandbox Code Playgroud)

在局部视图中,我有:

<h1>Your name is @Model.FirstName @Model.LastName<h1>
Run Code Online (Sandbox Code Playgroud)

但它说@Model没有FirstName和LastName属性.这有什么不对?当我使用@Model时,此字符串将在浏览器中呈现:

 { Title = "Saeed" }
Run Code Online (Sandbox Code Playgroud)

Dar*_*rov 17

不要这样做.不要将匿名对象传递给您的视图.它们的属性是内部的,在其他程序集中不可见.ASP.NET运行时将视图动态编译为单独的动态程序集.因此,定义视图模型并强烈键入您的视图.像这样:

public class PersonViewModel
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

然后:

var model = new PersonViewModel 
{ 
    FirstName = "Saeed", 
    LastName = "Neamati" 
};
return PartialView(model);
Run Code Online (Sandbox Code Playgroud)

在你看来:

@model PersonViewModel
<h1>Your name is @Model.FirstName @Model.LastName<h1>
Run Code Online (Sandbox Code Playgroud)