[英]Asp.Net MVC layout and partial views
让我们考虑两个使用相同布局的视图:
而不是两次定义正确的部分,我想知道我是否可以创建一个PartialView直接从布局页面链接。
问题是部分视图从正在呈现的视图中隐含地继承了它们的模型。 由于每个视图都有自己的模型,因此我在局部视图中最终会出现模型类型不匹配的情况。
从这里我看到两个解决方案:
所以这里是问题:
非常感谢,TB。
使用一个Interface
并在两个模型上实现它,这正是他们用来做的事情。
以下是使用两个不同模型实现接口的两个不同视图的示例。 这是子类型而不是ad-hoc多态 。
public class ViewModelOne : IReusableView
{
public string Name { get; set; }
public string Something { get; set; }
public int ANumber { get; set; }
}
public class ViewModelTwo : IReusableView
{
public string Name { get; set; }
public string Thing { get; set; }
public string SomethingElse { get; set; }
public int ANumber2 { get; set; }
}
public interface IReusableView
{
string Name { get; }
}
所以我们这里有一个非常简单的局部视图,即'InnerPartialView':
@model TestIntegration.Models.IReusableView
<div>
@Model.Name
</div>
哪个用于家庭和这个示例控制器的页面:
public class HomeController : Controller
{
public ActionResult Index()
{
ViewBag.Message = "Welcome to ASP.NET MVC!";
return View(new ViewModelOne() { Name = "hello", Something="sdfsdfs", ANumber = 1 });
}
public ActionResult About()
{
return View(new ViewModelTwo() { Name = "hello 2", SomethingElse = "aaaddd", ANumber2 = 10, Thing="rand" });
}
}
主页视图:
@model TestIntegration.Models.ViewModelOne
@{
ViewBag.Title = "Home Page";
}
<h2>@ViewBag.Message</h2>
<p>
To learn more about ASP.NET MVC visit <a href="http://asp.net/mvc" title="ASP.NET MVC Website">http://asp.net/mvc</a>.
@Html.Partial("InnerPartialView")
</p>
关于观点:
@model TestIntegration.Models.ViewModelTwo
@{
ViewBag.Title = "About Us";
}
<h2>About</h2>
<p>
Put content here.
@Html.Partial("InnerPartialView")
</p>
渲染局部视图时,可以向其发送模型:
@Html.RenderPartial(MVC.Partials.Views.Sidebar, Model.SideBarModel);
因此,您可以将数据作为父模型的一部分发送,该模型是部分侧边栏的模型。
在部分视图中,模型属于dynamic
类型,因此您无需知道它们的类型。 但是,您只需确保模型具有您需要的属性。 换句话说,你可以使用Model.MyProperty
或Model.MyProperty
作为MyPropertyType
使用时Html.Partial
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.