浅析Asp.net MVC 中Ajax的使用

在ASP.NET MVC beta中我们可以使用Ajax.BeginForm, Ajax.ActionLink来进行Ajax调用,同样我们也可以使用一些支持Ajax 框架如jQuery来简化对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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
@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如下:

?
1
2
3
4
5
6
7
8
9
<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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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>:

?
1
2
<div id="restaurantList">...
</div>

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

?
1
2
3
4
5
6
new AjaxOptions()
  {
    ....
    LoadingElementId = "loding",
    LoadingElementDuration = 2000
  }))

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

         

         cshtml文件中添加:

?
1
2
3
<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创建超链接                

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@*@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为:

?
1
2
3
4
5
6
7
8
<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:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/// <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元素:

?
1
2
3
<div id="renderBody">
          ....    
     </div>

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

          与1.1第四步相同。

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

第一步:添加表单:

?
1
2
3
4
5
6
7
8
9
10
11
@* ---------------------------------------------------------
     需要手工为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为:

?
1
2
3
4
5
<form data-otf-ajax-updatetarget="#restaurantList"
     data-otf-ajax="true"
     action="/Reviews"
     method="post"
     novalidate="novalidate">

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

    这里与1.1的第二步一样。

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$(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而已。

如对本文有疑问,请提交到交流社区,广大热心网友会为你解答!! 点击进入社区

您可能感兴趣的文章:

  • jQuery使用ajaxSubmit()提交表单示例
  • jquery中ajax使用error调试错误的方法
  • 基于jquery的$.ajax async使用
  • jquery.ajax之beforeSend方法使用介绍
  • 使用jquery的ajax需要注意的地方dataType的设置
  • jquery序列化form表单使用ajax提交后处理返回的json数据
  • 跨域请求之jQuery的ajax jsonp的使用解惑
  • Ajax的使用代码解析
  • Ajax的使用四大步骤
  • AJAX的使用方法详解

     

  • http://www.jb51.net/article/72660.htm

转载于:https://www.cnblogs.com/wanzhongjun/p/6864100.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/269392.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IronPython for ASP.NET:使用共享代码

IronPython入门教程第二篇使用共享代码&#xff0c;创建一个简单的IronPython类&#xff0c;并在ASP.NET页面中使用它。1&#xff0e;创建Web站点和ASP.NET页面&#xff0c;选择语言为IronPython。2&#xff0e;关于App_Script文件夹。经过上面第一步操作后&#xff0c;新建Web…

量子计算机到底神在哪里说明文,刘露《神奇的量子通信》初中说明文阅读及答案...

时至今日&#xff0c;究竟有没有一种绝对不可破译的保密方式&#xff0c;能让传送的信息绝对安全可靠&#xff1f;量子通信&#xff0c;就是迄今为止唯一被严格证明是无条件安全的通信方式。量子通信是利用量子力学基本原理进行信息传递的一种新型通信方式。理论上&#xff0c;…

SQLite—homework

主要的界面布局&#xff1a; <EditText android:id"id/edt" android:textSize"20dp" android:layout_width"match_parent" android:layout_height"wrap_content"/> <LinearLayout …

计算机硬件假故障,计算机硬件故障

计算机硬件故障电脑故障是指造成电脑系统正常工作能力失常的硬件物理损坏和软件系统的错误&#xff0c;因此总的可以分为硬件故障和软件故障&#xff0e;&#xff11;&#xff0e;硬件故障硬件故障是指电脑硬件系统使用不当或硬件物理损坏所造成的故障&#xff0e;例如&#xf…

@EnableConfigurationProperties 注解和@ConfigurationProperties注解实现配置绑定

ConfigurationProperties注解主要用来把properties配置文件转化为bean来使用的&#xff0c;而EnableConfigurationProperties注解的作用是ConfigurationProperties注解生效。如果只配置ConfigurationProperties注解&#xff0c;在IOC容器中是获取不到properties配置文件转化的b…

Windows Server 2003 群集配置测试

安装后配置心跳配置现在&#xff0c;每个节点上的网络都已得到了正确的配置&#xff0c;而且群集服务也已配置完毕&#xff0c;这时您需要配置网络角色&#xff0c;以定义其在群集中的功能。此处是一份“群集管理器”中网络配置选项的列表&#xff1a;为群集应用启用&#xff1…

可穿戴计算机硬件技术研究,可穿戴计算机硬件技术应用探究.doc

可穿戴计算机硬件技术应用探究可穿戴计算机硬件技术应用探究摘 要 可穿戴计算机是科技进步的产物&#xff0c;结合了“以人为本”的理念&#xff0c;作为新一代的计算机&#xff0c;其拥有独具一格的特征和性能。本文介绍可穿戴计算机的概念和特点&#xff0c;简要分析可穿戴计…

html.1

从w3school开始我的征途转载于:https://www.cnblogs.com/yueruifeng/p/6868836.html

“http 500内部服务器错误”的解决方法

“http 500内部服务器错误”的解决方法 IIS500错误&#xff0c;是因为微软的一个BUG所造成的。下面是解决办法:主要是由于IWAM账号&#xff08;在我的计算机即是IWAM_MYSERVER账号&#xff09;的密码错误造成了HTTP 500内部错误。 在详细分析HTTP500内部错误产生的原因之前&…

debug=true开启自动配置报告

Negative matches:表示不生效的自动配置 Positive matches:表示生效的自动配置

计算机的键盘如何保养,知识每天涨一点:快捷键2 键盘键位知识 电脑小保养

快捷键2win菜单键 L 快速锁屏&#xff0c;如果加了密码的话就可以在自己离开的时候防止别人窥屏哦win菜单键 E 快速打开我的电脑&#xff0c;加快查找文件的速度win菜单键 R 在打开的运行页面中输入psr.exe 回车进入选择开始录制就可以录制电脑此时操作了(不是视频&#xff0c;…

强制IE下载的代码

强制ie下载代码&#xff1a;示例&#xff1a;下载source/aaa.zip文件<a href"download.asp?naaa.zip">download.asp: <%Response.Buffer trueResponse.Cleardim urlDim fso,fl,flsizedim DnameDim objStream,ContentType,flName,isre,url1’*************…

vue移动端300毫秒延时

引入&#xff0c;在main.js里 import FastClick from fastclick FastClick.attach(document.body); 双击事件另行封装转载于:https://www.cnblogs.com/liuhuanwen/p/6869096.html

Lombok中@Data注解 @ToString注解 @NoArgsConstructo注解 @AllArgsConstructor注解

1:项目中引入依赖 <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency> 2:实体类上加上Data注解可以生产get和set方法 ToString表示可以生成ToString方法 NoArgsConstructor表示无参构造器 …

数据库计算机报告,外文数据库计算机检索报告实例.pdf

计算机检索报告姓名___________ 班级__________ 学号__________检 索 课 题&#xff1a; 跨文化组织行为研究数 据 库&#xff1a; EI village检 索 步 骤&#xff1a;1、确定检索提问式主题检索&#xff1a;Subject/Title/Abstract “culture cross”ANDSubject/Title/Abstrac…

MSSQL DBA权限获取WEBSHELL的过程

前言 本文主要通过一个案例来演示一下当MSSQL是DBA权限&#xff0c;且不知道路径的时候如何去获取WEBSHELL。当然这种方式对站库分离的无效。我测试的环境是在Win7 64位下&#xff0c;数据库是SQLServer 2000&#xff0c;IIS版本是7.5&#xff0c;程序是采用风讯的CMS。后台登录…

用编码实现gridview的创建!(一)(转www.asp.net)

完全用编码实现gridview创建和clounms的添加。 原理大概是三部分&#xff1a; datasource对象的设置和gridview对象的设置和Columns的添加。看完后感觉不难&#xff0c;但是人家的思路的确值得我们推敲。 这是第一部分&#xff0c;等第二部分出来了&#xff0c;马上更新。 prot…

计算机报名显示事务已被锁死,ORA-01591错误处理: 锁定已被有问题的分配事务处理20.18.156406挂起(转载)...

现象&#xff1a;dms中几乎所有的入库出库都报错2005-12-10 09:12:53 [ERROR] com.topup.ent.kroraina.model.sysmgmt.usersqlquery.USqlQueryDAO (USqlQueryDAO.java :4255) - errorjava.sql.SQLException: ORA-01591: 锁定已被有问题的分配事务处理20.18.156406挂…

系统进程和服务全集

系统进程和服务全集一、最基本的系统进程&#xff08;也就是说&#xff0c;这些进程是系统运行的基本条件&#xff0c;有了这些进程&#xff0c;系统就能正常运行&#xff09;smss.exe Session Managercsrss.exe 子系统服务器进程winlogon.exe 管理用户登录 services.exe 包含很…