【问题标题】:MVC 4 Ajax.Action link won t workMVC 4 Ajax.Action 链接不起作用
【发布时间】:2012-10-03 09:43:40
【问题描述】:

我正在尝试使用 Ajax 调用创建 MVC 网站。我直接使用 jquery 没有问题,但是当我使用 @Ajax.ActionLink 时,我没有得到我想要的结果。 这是我的看法:

    <script type="text/javascript">
        function deleteComment(id) {
            $.post(
                "/Role/AjaxTest",
                //{ id: id }, 

                function (data) {
                    $("#testtarget").html(data);               
                });
         }
    </script>


    <script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>
    <h2>TITLE</h2>
    <p>
 @Ajax.ActionLink("Ajax Test", "AjaxTest", "Role", new AjaxOptions{UpdateTargetId="testtarget",HttpMethod = "Get" , InsertionMode = InsertionMode.Replace }) 
    </p>
    <table>    
    @foreach (var item in Model) {
        <tr>
            <td>
                @Html.DisplayFor(modelItem => item.RoleName)
            </td>
            <td>
              <a onclick="deleteComment('@item.RoleId'); return false;" href="#">Delete</a>
                @Html.ActionLink("Delete", "Delete", new { id=item.RoleId })

            </td>
        </tr>
    }
    </table>
    <div id="testtarget">Test Div</div>

这是我的控制器数据:

public string AjaxTest()
{
    return "Some random text";
}

我在 Jquery 上的调用完美运行,文本出现在 div 中,但我的操作链接只是将我重定向到:localhost/Role/AjaxTest,所以我只在银行浏览器中看到消息。

知道这里有什么问题吗?

提前非常感谢!

【问题讨论】:

  • 您确定正在加载jquery.unobtrusive-ajax.min.js 文件吗?
  • 是的,当我点击网页源中的链接时: 它打开它。

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


【解决方案1】:

尝试在浏览器中使用 F12 并检查控制台中是否出现任何脚本错误。 Fiddler 还将帮助确定您的任何库是否未正确引用或加载。

【讨论】:

  • 谢谢!这是我的问题的一部分,它没有为它定义 jquery,所以我按照下一篇文章的建议做了。
【解决方案2】:

确保您已将jquery.unobtrusive-ajax.js 脚本添加到您的页面:

<script type="text/javascript" src="~/scripts/jquery.unobtrusive-ajax.js"></script>

或者如果您正在使用捆绑包(这是推荐的方法),请确保您已包含包含此脚本的捆绑包。例如,当您使用 ~/bundles/jqueryval 包的 Internet 模板创建新的 ASP.NET MVC 4 项目时:

bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(
    "~/Scripts/jquery.unobtrusive*",
    "~/Scripts/jquery.validate*")
);

所以请确保它在 jquery 包之后包含在您的视图中:

@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/jqueryval")

或者只是将它们组合成一个包。这完全取决于您的要求以及您是否需要不显眼的 jquery 验证支持。

我还建议您让控制器操作返回 ActionResult 而不是字符串:

public ActionResult AjaxTest()
{
    return Content("Some random text");
}

【讨论】:

  • 完美,非常感谢,你所说的一切都在我的项目中,我只是没有@Scripts.Render("~/bundles/jqueryval")。所以我将它添加到我的页面中,它成功了,将它放在布局“母版页”中是否“明智”?我猜想它会在很多页面中使用。非常感谢你的帮助!被困在这个上面大约 4 个小时......
猜你喜欢
  • 2023-04-08
  • 2016-10-31
  • 1970-01-01
  • 1970-01-01
  • 2015-09-11
  • 2012-11-28
  • 2020-03-01
  • 2018-03-16
  • 2013-02-23
相关资源
最近更新 更多