在asp.net mvc中使用PartialView返回部分HTML段
問題連結: MVC如何實現非同步呼叫輸出HTML頁面
該問題是個常見的 case, 故寫篇文章用於提示新人。
在asp.net mvc中返回View時使用的是ViewResult,它繼承自ViewResultBase 同時它還有個兄弟PartialViewResult
相信聰明的你已經知道了它倆的區別了,沒錯 一個用於返回整體,另一個返回區域性(部分)。
假設我有這樣一個需求,輸入使用者名稱,然後返回相關資訊。之前的做法可能會是用json格式來返回使用者的相關資訊,然後到頁面去渲染相關
的HTML,如果產生的相關HTML比較大的話,我還是建議你沿用之前的方案(返回json),因為傳輸的資料少,響應快一些。
反之,PartialViewResult 則是返回部分HTML 的不錯選擇。
下面就讓我們看下如何使用PartialViewResult:
Layout.cshtml
<!DOCTYPE html>
<html>
<head>
<title>@ViewBag.Title</title>
<script src="@Url.Content("~/Scripts/jquery-1.4.4.min.js")" type="text/javascript"></script>
</head>
<body>
@RenderBody()
</body>
</html>
Index.cshtml
@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>
PartialView Demo</h2>
<div>
Please write your name here
<input type='text' id='txtName' />
<input type='button' value='submit' id='btnOK' />
</div>
<br />
<div id='content'>
</div>
<script type="text/javascript">
$(function () {
$('#btnOK').click(function () {
var data = { Name: $('#txtName').val()};
$.ajax({
type: "POST",
url: '@Url.Action("PartialViewDemo", "Home")',
data: data,
datatype: "html",
success: function (data) {
$('#content').html(data);
},
error: function () {
alert("處理失敗!");
}
});
});
});
</script>
ViewUserControl.cshtml (Partial View)
@model Sample.Models.PartialViewDemoViewModel
<div>
<h2>ViewUserControl.cshtml</h2>
@Model.dt
<br /><br />
Hello~ @Model.Name
</div>
or ViewUC.ascx (View User Control)
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<Vancl.Sample.Models.PartialViewDemoViewModel>" %>
<div>
<h2>ViewUC.ascx</h2>
<%=Model.dt %>
<br /><br />
Hello~ <%=Model.Name %>
</div>
Model
public class PartialViewDemoViewModel
{
public string Name { set; get; }
public DateTime? dt { set; get; }
}
Action
[HttpPost]
public ActionResult PartialViewDemo(PartialViewDemoViewModel model)
{
model.dt = DateTime.Now;
return PartialView("ViewUserControl", model);
//return PartialView("ViewUC", model);
}
呼叫 Controller.PartialView方法時,可以指定 Partial View or View User Control 效果是一樣的
不寫字尾時,會查詢同目錄和Shared目錄下的檔案,也就是在同目錄或Shared目錄下時可以省略字尾名。
如果目錄下存在同名的情況,會找第一個並返回。
eg: 同目錄下有 ViewUserControl.ascx 和 ViewUserControl.cshtml
這時使用 return PartialView("ViewUserControl");
會返回 ViewUserControl.ascx 的內容,因為字母a在c前 :)
如果在這種情況下想呼叫 ViewUserControl.cshtml
則需要寫全路徑,return PartialView("~/Views/Home/ViewUserControl.cshtml");
當想訪問的 Partial View or View User Control 在不同目錄時,也可以通過全路徑的方式訪問。
Hope this helps,
Sandy
相關文章
- asp.net mvc 中的部分檢視ASP.NETMVC
- ASP.Net MVC開發基礎學習筆記(10):分部檢視PartialViewASP.NETMVC筆記View
- ASP.NET MVC中簡單使用AutofacASP.NETMVC
- 在 ASP.NET MVC 中使用 HTTPS (SSL/TLS)ASP.NETMVCHTTPTLS
- 【備忘】ASP.NET MVC 5 升級到 ASP.NET Core MVC 的部分變化ASP.NETMVC
- 【轉】在ASP.NET MVC中,使用Bundle來打包壓縮js和cssASP.NETMVCJSCSS
- ASP.NET MVC下使用AngularJs語言(八):顯示htmlASP.NETMVCAngularJSHTML
- 在Asp.net MVC中訪問靜態頁面ASP.NETMVC
- 在ASP.NET Core MVC 2.2 中使用AutoMapperASP.NETMVCAPP
- 在 ASP.NET MVC 中使用帶字尾的 URLASP.NETMVC
- Asp.Net MVC 學習心得 之 Html HelperASP.NETMVCHTML
- Asp.Net MVC 使用 AjaxASP.NETMVC
- 在Docker容器中執行ASP.NET MVC應用程式DockerASP.NETMVC
- ASP.NET MVC模型繫結——繫結部分欄位ASP.NETMVC模型
- 在 Asp.NET MVC 中使用 SignalR 實現推送功能ASP.NETMVCSignalR
- Asp.net MVC中ViewData與ViewBag的使用方法ASP.NETMVCView
- ASP.NET MVC 使用 Datatables (1)ASP.NETMVC
- ASP.NET MVC 使用 Datatables (2)ASP.NETMVC
- ASP.NET MVC TagBuilder使用ASP.NETMVCUI
- ASP.NET MVC 4使用PagedList.Mvc分頁ASP.NETMVC
- 在ASP.NET MVC中使用Knockout實踐05,基本驗證ASP.NETMVC
- 在asp.net handler 中 使用 sessionASP.NETSession
- Asp.Net MVC 中的 Cookie(譯)ASP.NETMVCCookie
- 在ASP.NET MVC中使用Knockout實踐08,使用foreach繫結集合ASP.NETMVC
- 在ASP.NET MVC中使用Knockout實踐03,巧用data引數ASP.NETMVC
- 在ASP.NET MVC中使用Knockout實踐09,自定義繫結ASP.NETMVC
- 微軟在 Apache 下開源 ASP.NET MVC微軟ApacheASP.NETMVC
- MVC 中的@Html.Raw 的用法MVCHTML
- 在ASP.NET MVC應用程式中隨機獲取一個字串ASP.NETMVC隨機字串
- Flask中怎樣返回html檔案?FlaskHTML
- [ASP.NET MVC 小牛之路]05 - 使用 NinjectASP.NETMVC
- [ASP.NET MVC 小牛之路]08 - Area 使用ASP.NETMVC
- 在ASP.NET MVC中使用Knockout實踐01,繫結Json物件ASP.NETMVCJSON物件
- ASP.NET MVC不可或缺的部分——DI及其本質工作分析ASP.NETMVC
- asp.net mvc 之旅 —— 第五站 從原始碼中分析asp.net mvc 中的TempDataASP.NETMVC原始碼
- [ASP.NET MVC 小牛之路]06 - 使用 Entity FrameworkASP.NETMVCFramework
- asp.net mvc中的使用者登入驗證過濾器ASP.NETMVC過濾器
- ASP.NET MVC4中用 BundleCollection使用問題手記ASP.NETMVC