[譯]ASP.NET Core 2.0 部分視圖


問題

如何在ASP.NET Core 2.0中使用部分視圖來重用頁面的公共部分?

答案

新建一個空項目,在Startup中添加MVC服務和中間件:

public void ConfigureServices(IServiceCollection services)
{
	services.AddMvc();
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
	if (env.IsDevelopment())
	{
		app.UseDeveloperExceptionPage();
	}

	app.UseMvc(routes =>
	{
		routes.MapRoute(
			name: "default",
			template: "{controller=Home}/{action=Index}/{id?}");
	});
}

添加兩個模型:

public class EmployeeViewModel
{
	public int Id { get; set; }
	public string Firstname { get; set; }
	public string Surname { get; set; }
	public AddressViewModel Address { get; set; }
}

public class AddressViewModel
{
	public string Line1 { get; set; }
	public string Line2 { get; set; }
	public string Line3 { get; set; }
}

添加控制器,返回ViewResult並傳入模型實例:

public class HomeController : Controller
{
	public IActionResult Index()
	{
		var model = new EmployeeViewModel
		{
			Id = 1,
			Firstname = "James",
			Surname = "Bond",
			Address = new AddressViewModel
			{
				Line1 = "Secret Location",
				Line2 = "London",
				Line3 = "UK"
			}
		};
		return View(model);
	}
}

添加視圖頁面Index.cshtml:

@using PartialView.Models;
@model EmployeeViewModel

<div style="border: 1px solid black; margin: 5px">
    <h2>Employee Details (parent view)</h2>

    <p>Firstname: @Model.Firstname</p>
    <p>Surname: @Model.Surname</p>

    @Html.Partial("_Address.cshtml", Model.Address)
</div>

添加部分視圖_Address.cshtml:

@using PartialView.Models
@model AddressViewModel

<div style="border: 1px dashed red; margin: 5px">
    <h3>Address Details (partial view)</h3>

    <p>Lin1: @Model.Line1</p>
    <p>Line2: @Model.Line2</p>
    <p>Line3: @Model.Line3</p>
</div>

現在,解決方案中的目錄結構:

 

運行,此時頁面顯示:

 

討論

部分視圖是一種渲染到其他視圖內部的特殊視圖。對於重用視圖的部分結構或者將一個大視圖分隔為一些小組件,這將非常有用。

部分視圖可以像正常視圖一樣被創建,並且可以通過控制器方法來返回ViewResult。關鍵的區別在於部分視圖渲染之前不運行_ViewStart.cshtml,並且它通常會被渲染到其他視圖的內部。

在視圖內部,部分視圖通過@Html.Partial()方法來渲染,並且傳入部分視圖的名稱和一個可選的模型實例。部分視圖名稱可以是絕對或者相對路徑,視圖引擎會在當前目錄和Shared目錄中查找相應的部分視圖。

部分視圖能獲取父視圖ViewData數據的一個拷貝。你還可以向其中傳入模型,這通常是父視圖模型的一部分。

注:ASP.NET Core還提供了另外一種更加靈活的解決方案來重用或者分隔視圖,這種解決方案不僅可以運行代碼,而且無需依賴父視圖。它就是視圖組件,下一節我們就會介紹。

 

源代碼下載

 

原文:https://tahirnaushad.com/2017/08/24/asp-net-core-2-0-mvc-partial-views/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM