【问题标题】:MVC3 @Ajax.Actionlink displaying new page instead of replacing targetupdateIdMVC3 @Ajax.Actionlink 显示新页面而不是替换 targetupdateId
【发布时间】:2014-09-02 07:02:46
【问题描述】:

VS2010/.net4/MVC3(MVC4也有同样的问题)

我正在尝试在我的项目中调用 AJAX 函数

@Ajax.ActionLink("Display ALL Cbms results", "All" , "Cbms", new AjaxOptions()
{
    HttpMethod = "GET",
    UpdateTargetId = "divCbms",
    InsertionMode = InsertionMode.Replace
})

控制器代码

public PartialViewResult All()
{
    List<cbms> model = cbms.GetAllCBMSData();
    return PartialView("_Cbms", model);
}

但不是替换目标 div,而是加载了一个全新的页面。

我在 _layout 页面中引用了不显眼的脚本

<!DOCTYPE html>
<html>
<head>
    <title>@ViewBag.Title</title>      
    <link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" />
    <script src="@Url.Content("~/Scripts/jquery-1.4.4.js")" type="text/javascript"></script>  
    <script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.js")" type="text/javascript"></script>

我尝试了这里提供的许多解决方案,但似乎没有一个有效。 其中:

  • 将 jquery 脚本更新到最新版本(1.11.1,因为我需要向后兼容旧的 IE 浏览器)

  • 解决方法如下:

    <appSettings>
    <add key="webpages:Version" value="1.0.0.0" />
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />
    </appSettings>
    
  • 将 HttpMethod 类型更改为:

    @Ajax.ActionLink("<text here>", "All" , "<view name here>", new AjaxOptions()
    {
        HttpMethod = "POST",
        UpdateTargetId = "<div name here>",
        InsertionMode = InsertionMode.Replace
    })
    

我真的不知道如何解决这个问题,我也尝试过创建一个全新的项目(在 MVC4 中),但这给出了同样的问题。

对请求的检查会返回以下结果: Ajax request details

网络检查返回以下结果: Ajax network header

浏览提供的 URL ("http://localhost:58339/Cbms/All?X-Requested-With=XMLHttpRequest") 没有问题。但这不是我想要的格式,因此不能解决我的问题。

【问题讨论】:

  • 你的控制器动作是否命中???
  • 新页面正在显示,上面有数据,所以必须点击控制器,是的。但是,我希望它更新 div 部分,而不是显示新页面。
  • 只需在正文标记的末尾或布局页面的页脚中提供'jquery.unobtrusive-ajax.js' js 文件的引用..
  • 在页脚(也在页眉或正文中)添加“jquery.unobtrusive-ajax.js”的引用会导致链接不再起作用??
  • 只包含一次

标签: jquery ajax asp.net-mvc-3


【解决方案1】:

如下使用

@Ajax.ActionLink("Display ALL Cbms results", "All" , "Cbms", new AjaxOptions
{
      HttpMethod = "GET",
      UpdateTargetId = "divCbms",
      InsertionMode = InsertionMode.Replace 
})

更新

@Ajax.ActionLink("Display ALL Cbms results", "All" , "Cbms", new AjaxOptions
{
    UpdateTargetId = "divCbms"
})

【讨论】:

  • 什么也没发生。我点击链接,没有任何变化。控制器仍然受到打击。 Return Partialview 也在执行中。
  • @DaGrooveNL 也发布 HTML。
  • @DaGrooveNL 您尝试在其中放置数据共享的 div 在哪里
  • 这是我的模型的列表视图。 @model IEnumerable @{ ViewBag.Title = "Cbms Home"; }

    cbmsIndex

    etc...
  • 删除样式后尝试一次
【解决方案2】:

我创建了一个不同的部分(具有不同的 ID),并尝试更新该部分。 这有效(严重)!!!

我完全被震撼了,这怎么可能?我真的不明白...

【讨论】:

    猜你喜欢
    • 2019-06-19
    • 2014-07-25
    • 2013-04-28
    • 1970-01-01
    • 1970-01-01
    • 2014-10-08
    • 2014-05-02
    • 2013-08-30
    • 2014-07-20
    相关资源
    最近更新 更多