在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 @ 2014-10-02 17:14  醉马踏千秋  阅读(344)  评论(0编辑  收藏  举报