另一种使此方法生效的方式是不使用
@model
指令来限制模型类型。然后,您可以为可能传递到部分视图中的不同类型的模型使用自己的变量(无论是从调用
@Html.Partial
时显式设置还是从包含视图继承)。
假设您网站的用户是员工或客户,并且您有一个小的部分视图,用于显示一些信息,无论他们如何登录(甚至如果他们没有登录),都应该正常工作。您的模型看起来像这样:
public class Employee
{
public virtual int ID { get; set; }
public virtual string FirstName { get; set; }
public virtual string LastName { get; set; }
public virtual ICollection<Role> Roles { get; set; }
public string GetPrimaryRole() { }
}
public class Customer
{
public virtual int ID { get; set; }
public virtual string FullName { get; set; }
public virtual int RewardsPoints { get; set; }
}
如您所见,这些信息相似,但将这两个内容抽象为共同的接口将非常困难。在您的部分视图顶部,您可以添加以下内容:
@{
var employee = Model as Employee;
var customer = Model as Customer;
string message = "Welcome, Guest!";
if (employee != null)
{
message = string.Format("Welcome, {0} {1}, {2}!",
employee.FirstName, employee.LastName, employee.GetPrimaryRole());
}
else if (customer != null)
{
message = string.Format("Welcome, {0}! You have {1} points!",
customer.FullName, customer.RewardsPoints);
}
}
<div>@message</div>
显然,这只是一个非常简单的例子,但它说明了如何简单而清晰地完成此操作。;-)
`@Html.Partial("_myPartialView")`
字典中传递的模型项类型为 'ModelOfTheContainerView',但该字典需要一个类型为 'PartialViewModel' 的模型项。 - kerzek