正文转自:http://blog.csdn.net/sandy945/article/details/6307750

 

 

问题链接: 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

 

相关文章

网站地图xml地图