[英]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.