浅析Asp.net MVC 中Ajax的使用

一、使用System.Web.Mvc.Ajax

  1.1 System.Web.Mvc.Ajax.BeginForm

  1.2 System.Web.Mvc.Ajax.ActionLink

二、手工打造自己的“非介入式”Javascript”

一、使用System.Web.Mvc.Ajax

1.1 System.Web.Mvc.Ajax.BeginForm

第一步:用Ajax.BeginForm创建Form

@using (Ajax.BeginForm( new AjaxOptions() { HttpMethod = "post", Url = @Url.Action("Index","Reviews"), InsertionMode = InsertionMode.Replace, UpdateTargetId = "restaurantList", LoadingElementId = "loding", LoadingElementDuration = 2000 })) { <input type="search" name="searchItem"/> <input type="submit" value="按名称搜索"/> }

最终生成的form如下:

<form id="form0" method="post" data-ajax-url="/Reviews" data-ajax-update="#restaurantList" data-ajax-mode="replace" data-ajax-method="post" data-ajax-loading-duration="2000" data-ajax-loading="#loding" data-ajax="true" action="/Reviews" novalidate="novalidate">

第二步:创建Ajax.BeginForm的new AjaxOptions()对象的Url指向的Action

new AjaxOptions() {        ... Url = @Url.Action("Index","Reviews")    ... } public ActionResult Index(string searchKey = null) { var model = _restaurantReviews.Where(r => searchKey == null || r.Name.ToLower().Contains(searchKey.ToLower().Trim())) .OrderByDescending(r => r.Rating) .Take(100) .Select(r=>new RestaurantReview() { City = r.City, Country = r.Country, Id = r.Id, Name = r.Name, Rating = r.Rating }).ToList(); if (Request.IsAjaxRequest()) { System.Threading.Thread.Sleep(1000 * 3);//模拟处理数据需要的时间 //return View(model)会返回整个页面,所以返回部分视图。 return PartialView("_RestaurantPatialView", model); } return View(model); }

注意:

    关于使用System.Web.Mvc.Ajax的说明:

      Controller的Action方法:

        (1)当显式添加[HttpPost],传给System.Web.Mvc.Ajax的AjaxOptions()的HttpMethod只能为 "post",

         (2)当显式添加[HttpGet],传给System.Web.Mvc.Ajax的AjaxOptions()的HttpMethod只能为 "get",

         (3)当都没有显式添加[HttpPost]和[HttpGet],传给System.Web.Mvc.Ajax的AjaxOptions()的HttpMethod可以为 "get"也可以为"post",

第三步:添加要承载更新页面的html元素,

  也就是添加添加AjaxOptionsd对象的UpdateTargetId 参数指定的Id为restaurantList的html元素:

  这里在页面中添加:id为restaurantList的<div>:

<div id="restaurantList">... </div>

第四步:(可选)为增强用户体验,添加AjaxOption对象的LoadingElementId参数指定的Id为loding的html元素:

new AjaxOptions() { .... LoadingElementId = "loding", LoadingElementDuration = 2000 }))

这里在页面中添加:id为loding的元素,添加了包含一个动态的刷新图片<div>:

cshtml文件中添加:

<div id="loding" hidden="hidden"> <img class="smallLoadingImg" src="@Url.Content("~/Content/images/loading.gif")" /> </div>

1.2 System.Web.Mvc.Ajax.ActionLink

System.Web.Mvc.Ajax.ActionLink与System.Web.Mvc.Ajax.BeginForm用法基本一致

第一步:使用System.Web.Mvc.Ajax.ActionLink创建超链接

@*@Html.ActionLink(item.Name, "Details", "Reviews",new{id = item.Id},new {@class ="isStar"})*@ @*<a class="isStar" href="@Url.Action("Details","Reviews", new {id = item.Id})">@item.Name</a>*@ @*使用Ajax的超链接*@ @{ var ajaxOptions = new AjaxOptions() { HttpMethod = "post", //Url = @Url.Action(""), UpdateTargetId = "renderBody", InsertionMode = InsertionMode.Replace, LoadingElementId = "loding", LoadingElementDuration = 2000 }; @Ajax.ActionLink(item.Name, "Details", "Reviews", new { id = item.Id }, ajaxOptions, new {@class="isStar"}) }

对应生成的最终html为:

<a class="isStar"   href="/Reviews/Details/1"   data-ajax-update="#renderBody"   data-ajax-mode="replace"   data-ajax-method="post"   data-ajax-loading-duration="2000"   data-ajax-loading="#loding"   data-ajax="true">

    第二步:定义出来响应超链接的Action:

/// <summary> ///关于使用System.Web.Mvc.Ajax的说明: /// Controller的Action方法: /// (1)当显式添加[HttpPost],传给System.Web.Mvc.Ajax的AjaxOptions()的HttpMethod只能为 "post", /// (2)当显式添加[HttpGet],传给System.Web.Mvc.Ajax的AjaxOptions()的HttpMethod只能为 "get", /// (3) 当都没有显式添加[HttpPost]和[HttpGet],传给System.Web.Mvc.Ajax的AjaxOptions()的HttpMethod可以为 "get"也可以为"post", /// </summary> /// <param name="id"></param> /// <returns></returns> public ActionResult Details(int id=1) { var model = (from r in _restaurantReviews where r.Id == id select r).FirstOrDefault(); if (Request.IsAjaxRequest()) { return PartialView("_RestaurantDetails", model); } return View(model); }

第三步:定义承载更新部分的html元素:

<div id="renderBody"> .... </div>

第四步:(可选)为增强用户体验,添加AjaxOptionsd对象的LoadingElementId参数指定的Id为loding的html元素:

          与1.1第四步相同。

二、手工打造自己的“非介入式”Javascript”

第一步:添加表单:

@* --------------------------------------------------------- 需要手工为Form添加些属性标签,用于锚点 模仿MVC框架的构建自己的“非介入式Javascript”模式 -------------------------------------------------------*@ <form method="post" action="@Url.Action("Index")" data-otf-ajax="true" data-otf-ajax-updatetarget="#restaurantList"> <input type="search" name="searchItem" /> <input type="submit" value="按名称搜索" /> </form>

生成的form为:

<form data-otf-ajax-updatetarget="#restaurantList" data-otf-ajax="true" action="/Reviews" method="post" novalidate="novalidate">

第二步:添加处理表单的Action:

    这里与1.1的第二步一样。

第三步:添加Js处理表单:

$(function () { var ajaxFormSubmit = function() { var $form = $(this); var ajaxOption = { type: $form.attr("method"), url: $form.attr("action"), data: $form.serialize() }; $.ajax(ajaxOption).done(function(data) { var updateTarget = $form.attr("data-otf-ajax-updatetarget"); var $updateTarget = $(updateTarget); if ($updateTarget.length > 0) { var $returnHtml = $(data); $updateTarget.empty().append(data); $returnHtml.effect("highlight"); } }); return false; }; $("form[data-otf-ajax='true']").submit(ajaxFormSubmit); });

注意:

  所谓的“非介入式Javascript”模式,是指假如没有添加这一步,表单照样能被处理,只是没用到Ajax而已。

时间: 2024-10-29 03:58:05

浅析Asp.net MVC 中Ajax的使用的相关文章

浅析Asp.net MVC 中Ajax的使用_AJAX相关

一.使用System.Web.Mvc.Ajax 1.1 System.Web.Mvc.Ajax.BeginForm 1.2 System.Web.Mvc.Ajax.ActionLink 二.手工打造自己的"非介入式"Javascript" 一.使用System.Web.Mvc.Ajax   1.1 System.Web.Mvc.Ajax.BeginForm      第一步:用Ajax.BeginForm创建Form @using (Ajax.BeginForm( new A

ASP.NET MVC中使用ASP.NET AJAX异步访问WebService

使用过ASP.NET AJAX的朋友都知道,怎么通过ASP.NET AJAX在客户端访问 WebService,其实在ASP.NET MVC中使用ASP.NET AJAX异步访问WebService 也没 什么大的差别. 在ASP.NET应用程序里使用ASP.NET AJAX访问WebService通常都是通过 ScriptMananger引入WebService生成客户端代理的方法,同时也可以使用 Microsoft Ajax Library来完成.本文将介绍在ASP.NET MVC中使用AS

ASP.NET MVC中的AJAX应用_实用技巧

一.ASP.NET MVC中的AJAX应用 首先,在ASP.NET MVC中使用自带的ajax功能,必须要导入2个js文件(顺序不能颠倒): ASP.NET MVC提供了2个常用的ajax辅助方法. Ajax.ActionLink 该辅助方法用于在页面上生成具有ajax功能的超链接. 在该辅助方法中有一个AjaxOptions类型的参数,它包括如下属性: Confirm:在发送ajax请求前,弹出确认对话框,该属性就是设置对话框中的提示消息HttpMethod:用于设置请求的类型:Get|Pos

ASP.NET MVC之AJAX

本文的例子基于Asp.Net MVC Preview 3,并采用了jQuery完成客户端的JavaScript功能. 之前的两篇文章粗粗的对Asp.Net MVC做了介绍.这里强烈推荐一个网站,有兴趣的朋友可以看这里.这是Rob Conery的个人网站,他采用了Asp.Net MVC做了一个Demo, 不仅在codeplex上提供了这个项目的源代码,还提供了15个视频,这些视频的内容包括从项目的构思.到设计.再到实现和重构的一个完整的过程. ASP.NET Web Form下的AJAX 在传统的

asp.net mvc中,ip怎么传入sql数据库库

问题描述 asp.net mvc中,ip怎么传入sql数据库库 asp.net mvc中,我在control中获取了ip地址,但是怎么传入sql数据库呢?新手,只知道怎么提交用户填写的表单里的数据... 解决方案 假设你用的是ef一类的框架,那么xxxDataEntites db = new xxxDataEntites();db.表.Add(new 实体 { ip = 你获得的ip });db.SaveChanges(); 解决方案二: ajax啊,你给他绑到用户点击的地方 解决方案三: 在数

ASP.NET MVC中加载WebForms用户控件(.ascx)

原文:ASP.NET MVC中加载WebForms用户控件(.ascx) 问题背景 博客园博客中的日历用的是ASP.NET WebForms的日历控件(System.Web.UI.WebControls.Calendar),它会为"上一月"."下一月"的链接生成"__doPostBack()"的js调用,如下图: 目前发现它会带来两个问题: 1. 不支持IE10: 2. 某些电脑不允许执行__doPostBack. 问题提炼 前提: 我们想以最低

ASP.NET MVC中使用JavaScriptResult的用法示例_实用技巧

本文实例讲述了ASP.NET MVC中使用JavaScriptResult的用法.分享给大家供大家参考,具体如下: 在页面中我们使用JavaScript来设置id为qubernet的span标签样式,具体代码如下: JS: <script> $(function () { var thisObj = document.getElementById("qubernet"); thisObj.setAttribute("style", "color

ASP.NET MVC中使用jQuery时的浏览器缓存问题详解_实用技巧

介绍 尽管jQuery在浏览器ajax调用的时候对缓存提供了很好的支持,还是有必要了解一下如何高效地使用http协议. 首先要做的事情是在服务器端支持HTTP GET,定义不同的URL输出不同的数据(MVC里对应的就是action).如果要使用同一个地址获取不同的数据,那就不对了,一个HTTP POST也不行因为POST不能被缓存.许多开发人员使用POST主要有2个原因:明确了数据不能被缓存,或者是避免JSON攻击(JSON返回数组的时候可以被入侵). 缓存解释 jQuery全局对象里的ajax

ASP.NET MVC中图表控件的使用方法_实用技巧

微软发布了一个强大的ASP.NET的图表控件,支持丰富的图表选项设置-包括列,点,泡沫,饼图,圆环图,金字塔,漏斗,盒形图,面积,范围,AJAX的互动,以及更多.Microsoft图表控件示例项目包括ASP.NET页的图表样本超过200个.在这篇文章中,我将展示如何在ASP.NET MVC中使用图表控件. 这里介绍一个非常简单的项目,显示了一个类的结果比较.两个字段 - ID(这是唯一的一个学生)和GPA(平均成绩) - 代表一个特定的学生的结果.各种图表结果显示,学生的结果进行比较.我希望把重