在之前
.NET Core第13天_View常見操作_Layout佈局頁_PartialView部分檢視_強類型視圖(大量資料或物件的傳遞)
有介紹PartialView的功用跟寫法
主要用於某個主視圖中的部分內容,常用在部分內容更新。
於Controller當中會使用 PartialView()語法來回傳
可返回指定的View或Model Entity,跟View()使用一樣。
跟一般的View不同之處在於沒有引用佈局頁。
PartialView使用語法寫法
就有分透過HtmlHelper的方式
兩個同步的寫法方式
@Html.Partial("分布視圖路徑")
@{ Html.RenderPartial("分布視圖路徑");}
兩個非同步的寫法方式
@await Html.PartialAsync("分布視圖路徑")
@{await Html.RenderPartialAsync("分布視圖路徑")}
另外還有
PartialView的tag寫法
<partial name="部分檢視完整路徑(若是在當前目錄下則只需要檔名不需要副檔名)" />
新增PartialController.cs
using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Net5App6.Controllers
{
public class PartialController : Controller
{
public IActionResult Index()
{
return View();
}
}
}
跟對應Index檢視
@{
ViewData["Title"] = "PartialTagHelper";
}
<h4>主檢視</h4>
<div>
<partial name="APartial" />
</div>
另外還有APartial檢視
<div style="color:blue">
部分檢視
</div>
運行效果
若今天是在不同於當前View的部分檢視則要寫完整路徑包含副檔名
比方今天新增BPartial.cshtml在./Views/Home目錄下
ViewModel傳遞至Partial Tag
準備一個ViewModel
PartialViewModel.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Net5App6.Models
{
public class PartialViewModel
{
public string Title { get; set; }
public int Sum { get; set; }
}
}
PartialController.cs微調整後
using Microsoft.AspNetCore.Mvc;
using Net5App6.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Net5App6.Controllers
{
public class PartialController : Controller
{
public IActionResult Index()
{
PartialViewModel model = new PartialViewModel();
model.Title = "Pizza";
model.Sum = 600;
return View(model);
}
}
}
1.傳送物件中的單一個property
可以透過for=物件屬性
./Views/Partial/APartial.cshtml
<div style="color:blue">
A部分檢視
</div>
<p>從主檢視傳來的Title:
@Model
</p>
./Views/Partial/Index.cshtml
@{
ViewData["Title"] = "PartialTagHelper";
}
<h4>主檢視</h4>
@model PartialViewModel
<div>
<partial name="APartial" for="Title" />
</div>
<div>
<partial name="/Views/Home/BPartial.cshtml" />
</div>
運行效果
可以看到主檢視有成功把Model屬性資料傳遞給APartial
2.傳送整個物件
可以在屬性去擴充一個物件本體
PartialViewModel.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Net5App6.Models
{
public class PartialViewModel
{
public string Title { get; set; }
public int Sum { get; set; }
public PartialViewModel _PartialViewModel { get; set; }
}
}
PartialController.cs
using Microsoft.AspNetCore.Mvc;
using Net5App6.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Net5App6.Controllers
{
public class PartialController : Controller
{
public IActionResult Index()
{
PartialViewModel model = new PartialViewModel();
model.Title = "Pizza";
model.Sum = 600;
model._PartialViewModel = model;
return View(model);
}
}
}
./Views/Partial/Index.cshtml
@{
ViewData["Title"] = "PartialTagHelper";
}
<h4>主檢視</h4>
@model PartialViewModel
<div>
<partial name="APartial" for="_PartialViewModel" />
</div>
<div>
<partial name="/Views/Home/BPartial.cshtml" />
</div>
這裡我們for 指定物件屬性存自己本身
APartial.cshtml
@model PartialViewModel
<div style="color:blue">
A部分檢視
</div>
<p>
從主檢視傳來的物件資料:
<span>@Model.Title</span>
<span>@Model.Sum</span>
</p>
其中第一行可以省略,只是幫助在使用@Model存取屬性時候可以有提示訊息。
運行效果
本篇已同步發表至個人部落格
https://coolmandiary.blogspot.com/2021/08/net-core25partialtaghelper.html