【问题标题】:ASP MVC + AJAX, trying to Update a div asynchronouslyASP MVC + AJAX,尝试异步更新 div
【发布时间】:2011-05-28 00:42:24
【问题描述】:


我是 Asp MVC 的新手,我正在尝试完成一些异步更新(我正在使用 MVC3 RC2,带有 Razor,但我也可以使用 ASPX 解决方案进行管理)。

我有一个母版页,它通过调用 Html.RenderAction("Cart","Shop") 在每个页面上呈现一个购物车框。 ShopController 的 Cart 动作调用数据库等,并输出结果。这行得通。
第一个问题:如果我在这个局部视图中放置一个 ActionLink(如 Html.ActionLink("Remove")),那么即使我从 Remove 操作中调用 PartialView(),它只呈现购物车,没有其他内容(本质上,我的页面消失了)。
第二个问题:在这个局部视图中有一个名为“cartContent”的 div。我希望能够在任何地方放置一个链接(不仅仅是在主页面或部分视图中),当按下它时会调用控制器操作,然后根据结果仅更新 cartContent div。我已经尝试过 Ajax.ActionLink,但它的作用与 Html.ActionLink 相同,即使我导入了 Microsoft.MvcAjax js 库。
另外,如果我解决了第一个问题,我也希望它是异步的。

我使用什么解决方案?我尝试将 UpdateTargetID 设置为“cartContent”,我尝试将 cartContent 包装到 Ajax.BeginForm 中,什么都没有。我必须使用 jQuery(我对此一无所知)吗?我是否序列化一些对 JSON 的响应,并在 Javascript 中手动更新 div? (我不是很擅长 JS,我来自 C# 方面)

【问题讨论】:

  • ajax.beginform 应该是答案,您是否在默认主布局中启用了 mvc ajax javascript?我记得默认情况下它是禁用的。 davidhayden.com/blog/dave/archive/2009/05/19/… 也可能有帮助
  • 那是我一遍又一遍地阅读的同一页。我的 _Layout.cshtml 中有以下几行(就像 SiteMaster 的模板):

标签: asp.net-mvc ajax asp.net-mvc-2 asp.net-ajax


【解决方案1】:

你可以在任何你想要的地方放一个链接:

@Html.ActionLink("remove item", "remove", "somecontroller", 
    new { id = Model.Id }, new { @class = "remove" })

然后在一个单独的 javascript 文件中:

$(function() {
    $('.remove').click(function() {
        // when the link is clicked
        // perform an ajax request:
        $.ajax({
            url: this.href,
            type: 'delete',
            success: function(result) {
                // when the AJAX call succeed do something with the result
                // for example if the controller action returned a partial
                // then you could show this partial in some div
                $('#someDivId').html(result);
            }
        });

        // don't forget to cancel the default action by returning false
        return false;
    });
});

备注:如果您要更新的 div 也包含链接,那么您可能需要使用 .live() 函数,否则点击事件处理程序将无法第二次工作,因为 DOM 将被修改:

$('.remove').live('click', function() {  
     ...
});

【讨论】:

  • type: 'delete'
  • @TDaver,表示使用DELETE HTTP动词。所以你的控制器动作可能用[HttpDelete] 装饰。在服务器上删除资源时,最好使用 DELETE 动词。它更加 RESTful。
  • 哇!有些东西正在工作:) 我下班回来后会试试现场直播。还有一件事:我是否必须为我想要异步刷新的每个 div 编写这个 JS,或者我可以制作一个通用的?为什么 MS AJax 库中没有这样的库?谢谢顺便说一句,你让我很开心!
猜你喜欢
  • 2016-08-25
  • 2016-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-16
相关资源
最近更新 更多