【问题标题】:Ajax (partial view) in ASP.NET MVC 5 is not working - always open just partial view aloneASP.NET MVC 5 中的 Ajax(局部视图)不起作用 - 始终仅单独打开局部视图
【发布时间】:2014-05-16 17:45:42
【问题描述】:

我有一个问题,点击时应该只刷新页面的一部分(部分视图),只用“选择”打开新页面(这是应该在索引页面内显示的部分)。我正在尝试使用本教程 http://csharp-video-tutorials.blogspot.sk/2013/09/part-92-ajax-with-aspnet-mvc.html 执行此操作,但我不知道出了什么问题 - 我在这个论坛上也没有找到任何相关信息。

共享 _Layout 中的资源:

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

内部地图/索引:

@Ajax.ActionLink("All", "GetTracks",
                new AjaxOptions
                {
                    HttpMethod = "GET", // HttpMethod to use, GET or POST
                    UpdateTargetId = "mytestdiv", // ID of the HTML element to update
                    InsertionMode = InsertionMode.Replace // Replace the existing contents
                })

<div id="mytestdiv">
</div>

地图控制器(我知道仅使用 Viewbag 是不好的解决方案 - 它只是暂时的):

public PartialViewResult GetTracks()
{
    List<int> trackIDs = new List<int>();

    var queryTrack = from dTrack in db.track
                        where dTrack.device_id == 1
                        select dTrack.id;

    foreach (int trackId in queryTrack)
    {
        trackIDs.Add(trackId);
    }

    ViewBag.trackIDs = trackIDs;
    return PartialView("SelectTrackView");
}

以及我想用 Ajax 重新加载的内容,位于 ~/Views/Map/SelectTrackView.cshtml:

<select id="SelectTrack" name="idTrack" class="form-control" style="margin:20px" onchange="selectTrack()">

    @foreach (int number in ViewBag.trackIDs)
    {
        if (ViewBag.selectedidTrack == @number)
        {
            <option value="@number" selected="selected">@number</option>
        }
        else
        {
            <option value="@number">@number</option>
        }
    }
</select>

感谢您的帮助。

【问题讨论】:

  • 您的浏览器javascript控制台有错误吗?
  • 这也是最终源代码的样子:全部

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


【解决方案1】:

您的页面中是否引用了 jquery.unobtrusive-ajax.js ?

如果不是,这些助手生成的 data-* 标签将不会被解释,并且链接将被视为“正常”链接。

编辑:

我认为你需要这个包:Microsoft jQuery Unobtrusive Ajax

如果你不想使用这个包,直接放

<script>
(function($){
    $(document).on("click","a[data-ajax='true']", function(e){
        e.preventDefault();
        $("#"+ $(this).attr("data-ajax-update")).load(this.href);
    });
})(jQuery);
</script>

【讨论】:

  • 当我添加&lt;script src="~/Scripts/jquery.validate.unobtrusive.min.js"&gt;&lt;/script&gt; 时,它给出了错误:“Uncaught TypeError: Cannot set property 'unobtrusive' of undefined”。我真的不确定 - 但@Scripts.Render("~/bundles/jquery") 不会添加不显眼?因为在我的项目脚本中,我添加了这个包。但是,是的,它可能不像我想象的那样工作。
  • 谢谢,我从一开始就有糟糕的库:-/ 真是愚蠢的错误……当我下载 Microsoft jQuery Unobtrusive Ajax 库时,它开始正常工作。使用~/Scripts/jquery.validate.unobtrusive.min.js,它根本不起作用:(。非常感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-22
相关资源
最近更新 更多