在asp.net mvc模式中使用PartialView返回部分HTML

PartialView(返回HTML(局部))

在asp.net mvc中返回View时使用的是ViewResult,它继承自ViewResultBase 同时它还有个兄弟PartialViewResult 

相信聪明的你已经知道了它俩的区别了,没错 一个用于返回整体,另一个返回局部(部分)。 

假设我有这样一个需求,输入用户名,然后返回相关信息。之前的做法可能会是用json格式来返回用户的相关信息,然后到页面去渲染相关的HTML,如果产生的相关HTML比较大的话,我还是建议你沿用之前的方案(返回json),因为传输的数据少,响应快一些。 

反之,PartialViewResult 则是返回部分HTML 的不错选择。

下面就让我们看下如何使用PartialViewResult: 

Layout.cshtml

复制代码
 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4     <title>@ViewBag.Title</title>
 5     <script src="@Url.Content("~/Scripts/jquery-1.4.4.min.js")" type="text/javascript"></script>
 6 </head>
 7    <body>
 8 
 9       @RenderBody()
10 
11    </body>
12 </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)

复制代码
 1 @model Sample.Models.PartialViewDemoViewModel 
 2 
 3 <div>
 4 
 5 <h2>ViewUserControl.cshtml</h2> 
 6 
 7 @Model.dt<br /><br />
 8 
 9 Hello~  @Model.Name
10 
11 </div>
复制代码

 

or ViewUserControl.ascx

复制代码
 1 <%@ Control Language="C#"Inherits="System.Web.Mvc.ViewUserControl<Vancl.Sample.Models.PartialViewDemoViewModel>" %>
 2 
 3 <div>
 4 <h2>ViewUC.ascx</h2> 
 5 
 6 <%=Model.dt %><br /><br />
 7 
 8 Hello~  <%=Model.Name %>
 9 
10 </div>
复制代码


 

Model

 

复制代码
1 public class PartialViewDemoViewModel
2 
3 {
4 
5         public string Name { set; get; }
6 
7         public DateTime? dt { set; get; }
8 
9 }
复制代码

Action

 

1 [HttpPost]
2 public ActionResult PartialViewDemo(PartialViewDemoViewModel model)
3 {
4      model.dt = DateTime.Now;
5      return PartialView("ViewUserControl", model); 
6 
7      //return PartialView("ViewUC", model); 
8 }

 

调用 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 在不同目录时,也可以通过全路径的方式访问。

 

posted @   醉马踏千秋  阅读(360)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端
点击右上角即可分享
微信分享提示