ASP.NET MVC异步加载分部视图

  在asp.net mvc中返回View时使用的是ViewResult,它继承自ViewResultBase 同时它还有个兄弟PartialViewResult相信聪明的你已经知道了它俩的区别了,没错 一个用于返回整体,另一个返回局部(部分)。

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

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

1、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>

 

2、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>

 

3、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>

 

4、Model

public class PartialViewDemoViewModel

    {

        public string Name { setget; }

        public DateTime? dt { setget; }

    }

 

5、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 的内容,因为字母ac :)。如果在这种情况下想调用 ViewUserControl.cshtml,则需要写全路径,return PartialView("~/Views/Home/ViewUserControl.cshtml");

  当想访问的 Partial View or View User Control 在不同目录时,也可以通过全路径的方式访问。

 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值