iT邦幫忙

2021 iThome 鐵人賽

DAY 11
0
自我挑戰組

.NET Core MVC網頁應用開發系列 第 25

.NET Core第25天_PartialTagHelper的使用_主檢視傳遞資料(單一property跟整個物件)

  • 分享至 

  • xImage
  •  

在之前
.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>

https://ithelp.ithome.com.tw/upload/images/20210927/20107452puzbgy1W6r.png

另外還有APartial檢視

<div style="color:blue">
    部分檢視
</div>

運行效果

https://ithelp.ithome.com.tw/upload/images/20210927/201074520WHQV40gkK.png

若今天是在不同於當前View的部分檢視則要寫完整路徑包含副檔名
比方今天新增BPartial.cshtml在./Views/Home目錄下
https://ithelp.ithome.com.tw/upload/images/20210927/20107452NlX12mLTjM.png

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
https://ithelp.ithome.com.tw/upload/images/20210927/20107452zPHtcaRLBY.png

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://ithelp.ithome.com.tw/upload/images/20210927/20107452n03F4NsO4F.png

本篇已同步發表至個人部落格
https://coolmandiary.blogspot.com/2021/08/net-core25partialtaghelper.html


上一篇
.NET Core第24天_LinkTagHelper的使用
下一篇
.NET Core第26天_ScriptTagHelper的使用
系列文
.NET Core MVC網頁應用開發30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言