• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    浅析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而已。

    您可能感兴趣的文章:
    • jQuery使用ajaxSubmit()提交表单示例
    • jquery中ajax使用error调试错误的方法
    • 基于jquery的$.ajax async使用
    • jquery.ajax之beforeSend方法使用介绍
    • 使用jquery的ajax需要注意的地方dataType的设置
    • jquery序列化form表单使用ajax提交后处理返回的json数据
    • 跨域请求之jQuery的ajax jsonp的使用解惑
    • Ajax的使用代码解析
    • Ajax的使用四大步骤
    • AJAX的使用方法详解
    上一篇:使用Yii整合的pjax(pushstate+ajax)实现无刷新加载页面
    下一篇:AJAX跨域请求之JSONP获取JSON数据
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯

    时间:9:00-21:00 (节假日不休)

    地址:江苏信息产业基地11号楼四层

    《增值电信业务经营许可证》 苏B2-20120278

    浅析Asp.net MVC 中Ajax的使用 浅析,Asp.net,MVC,中,Ajax,的,