【问题标题】:i need tips to write ajax for asp.net mvc我需要为 asp.net mvc 编写 ajax 的技巧
【发布时间】:2015-06-29 10:15:42
【问题描述】:

当我为整个应用程序中的每个任务编写 jQuery Ajax 调用时,我遇到了麻烦。我编写 jQuery Ajax 调用来在特定事件后更新界面,例如当另一个下拉列表选择发生变化时更新下拉列表。

我需要最快的方式来处理我的应用程序中的 Ajax 请求并避免代码重复。

 // code sample to ajax request which I used
function onChange(bookid) { 
      $.ajax({
        type: "GET",
        url: '@Url.Action("books","subject")',
        data : { bookid: bookid},
        dataType: "json",
        success: function (result) { 
          alert('success');
          //do whatever you want
        },
        error: function(result){
        }
    }); 
};

【问题讨论】:

    标签: c# ajax asp.net-mvc asp.net-mvc-4 asp.net-ajax


    【解决方案1】:

    如果您正在寻找一种方法来简化此类 ajax 调用以在特定事件后更新接口,使用 asp.net mvc 4,我建议您查看很棒的 awesome 帮助程序集。

    请放心,这是一组非常容易学习的助手。

    我鼓励去Live demo 玩一会儿。您将很快意识到它的巨大潜力。

    然后是主从下拉列表的示例(默认演示页面上的第一个元素)。

    这是进入视图的代码:

    Cascading using binding to Parent:<br />
    <%:Html.Awe().AjaxDropdown("Category")
                 .Url(Url.Action("GetCategories","Home")) %>
    
    <%:Html.Awe().AjaxDropdown("ChildMeal")
                .Url(Url.Action("GetMeals","Home"))
                .Parent("Category") %>
    

    第一个下拉列表是 ÀjaxDropDownnamedCategory. It is filled by executing an action method calledGetCategoriesfound on a controller calledHomeController`(在本例中,这些是膳食类别)。

    请注意,Awesome 在某些情况下会使用一些约定。例如,如果我们将第一个 AjaxDropDown 声明限制为 &lt;%:Html.Awe().AjaxDropdown("Category")%&gt;,那么 Awesome 将假定我们将从名为 GetItems 的操作方法填充下拉列表,并且它会期望在名为 CategoryAjaxDropDownController 的控制器上找到它.但是由于我们已经指定了对应动作的 url,它会在一个名为 SPECIFIED_NAME+Controller 的控制器上寻找指定的动作方法(在这个例子中是 HomeController) p>

    第二个名字是 ChildMeal,它的父级是 Category ajax 下拉列表,当在 Category 下拉列表中更改所选元素时填充它,当发生这种情况时,它通过执行 HomeController 控制器中的 GetMeals 操作方法来填充.

    这里是HomeController中动作方法的代码

    public ActionResult GetCategories(int? v)
    {
        var items = Db.Categories
            .Select(o => new SelectableItem(o.Id, o.Name, v == o.Id));// value,     text, selected
        return Json(items);
    }
    
    public ActionResult GetMeals(int? v, int? parent)
    {
        var items = Db.Meals.Where(o => o.Category.Id == parent)
            .Select(o => new SelectableItem(o.Id, o.Name, v == o.Id));// key,     text, selected
        return Json(items);
    } 
    

    从返回对象中可以看出,JSON 处理复杂性由 Awesome 管理,这一切对开发人员来说都是透明的(您只需调用 Json(items) 即可完成。

    Db 对象提供数据。您可以使用继承自 System.Data.Entity.DbContext 的类来从数据库加载数据。

    在许多非常有趣的丰富组件中,您还有许多其他类似的组件(例如 AjaxRadioList、AjaxCheckBoxList、AjaxList、AutoComplete 组件……)。

    我建议你去现场演示,玩一下,看看各种示例和源代码,然后尝试创建你的第一个很棒的项目。

    【讨论】:

      【解决方案2】:

      jQUery 的 ajax 调用速度与您的预期一样快 - 客户端根本没有太多开销。

      至于额外的代码......每次调用:

      function onChange(bookid) { 
            $.ajax({ 
              type: "GET",                           // not needed - default GET
              url: '@Url.Action("books","subject")',
              data : { bookid: bookid},
              dataType: "json",                 // not needed - jQuery will guess
              success: function (result) { 
                alert('success');
                //do whatever you want
              },
              error: function(result){     // not needed if you're leaving empty
              }
          }); 
      };
      

      可能

        $.get('@Url.Action("books" , "subject")' , { bookid: bookid}, function(result){
            alert(result);
        });
      

      【讨论】:

      • 如果参数是复杂对象并且有超过20个属性可以吗?
      • 然后传入javascript对象
      • 有它的属性?
      • 我想我会花更多时间!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-23
      • 2013-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多