c# - 使用 JQuery 重新加载部分 View

标签 c# jquery asp.net asp.net-mvc-3 partial-views

我有一个页面,顶部有一个视频,还有一个可供您选择的视频列表。目前,单击视频列表中的链接将重新加载整个页面。我需要它仅刷新包含页面顶部视频的部分 View 。

我在这里看到了几篇关于 SO 的帖子,展示了如何使用 JQuery 重新加载部分 View ,但在我的情况下无法使其正常工作。我不确定如何传递视频的正确 ID。

Controller :

    public ActionResult Videos(int topVideo = 0)
    {
        VideosModel model = new VideosModel();
        model.Videos = StatsVideoService.GetEntityList(new Lookup(TableStatsVideo.IsDeleted, false)).OrderByDescending(x => x.DateCreated).ToList();

        if (topVideo == 0)
            model.TopVideo = model.Videos.First();
        else
        {
            model.TopVideo = model.Videos.Where(x => x.StatsVideoId == topVideo).FirstOrDefault();
            if (model.TopVideo == null)
                model.TopVideo = model.Videos.First();
        }

        return View(model);
    }

查看:

@model Project.Models.VideosModel

<section class="videos">
    <div id="top_video">
        @{Html.RenderPartial("StatsVideo", Model.TopVideo);}
    </div>

    <ul>
        @foreach (var item in Model.Videos)
        {
            <li>
                <div class="videoList">
                    <a href ="@Url.Action("Videos", "Home", new { topVideo = item.StatsVideoId })">
                        <img src="@Url.Content("~/Content/img/video-ph.png")" />
                    </a>
                    <p class="videoTitle">@item.Title</p>
                </div>
            </li>
        }
    </ul>
</section>

如果需要更多信息,请告诉我。

最佳答案

经过几个小时的头撞墙后,我终于成功了!作为对将来查看本文的其他人的引用,以下是我如何让它发挥作用:

我将链接的onclick设置为指向一个javascript方法,并传入视频的id作为参数:

    @foreach (var item in Model.Videos)
    {
        <li>
            <div class="videoList">
                <a href ="#" onclick="updateTopVideo(@item.StatsVideoId)">
                    <img src="@Url.Content("~/Content/img/video-ph.png")" />
                </a>
                <p class="videoTitle">@item.Title</p>
            </div>
        </li>
    }

然后我将此脚本包含在底部的 View 中:

<script>
    var updateTopVideo = function (itemId) {

        var url = '@Url.Content("~/Home/StatsVideo/")';
        url = url + itemId;
        $.get(url, "", callBack, "html");
    };

    var callBack = function (response) {
        $('#top_video').html(response);
    };
</script>

最后,我向 Controller 添加了一个方法,该方法将返回屏幕顶部视频所需的部分 View :

    public ActionResult StatsVideo(int Id)
    {
        IStatsVideo vid = StatsVideoService.GetEntity(new Lookup(TableStatsVideo.StatsVideoId, Id));
        if (vid == null)
            vid = StatsVideoService.GetEntityList(new Lookup(TableStatsVideo.IsDeleted, false)).OrderByDescending(x => x.DateCreated).FirstOrDefault();

        return PartialView(vid);
    }

这段代码应该相当容易理解。基本上,onclick 调用第一个 javascript 方法,然后该方法调用 Controller 。 Controller 构建局部 View 并返回它。第一个 javascript 方法将其传递给第二个 javascript 方法,该方法将 div“top_video”的 html 设置为返回的部分 View 。

如果有任何事情没有意义,或者任何人将来遇到麻烦,请告诉我,我会尽力提供一些帮助。

关于c# - 使用 JQuery 重新加载部分 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14419436/

相关文章:

c# - 通用列表。首先不工作 LINQ

c# - 确定某个 URL 是否位于某个目录中的正确方法是什么?

c# - 自动将查询字符串从页面请求附加到 ASp.NET WebForms 中的出站页面请求

c# - 通过 C# 代码启用/禁用 <a> 标签

c# - 固定无法打开登录请求的数据库。登录失败

c# - 通过 DataContract 序列化到 XML Writer

c# - 为具有大量属性的类实现 GetHashCode() 的最佳方法是什么?

jquery - 使用 JQuery 同时折叠和展开 Accordion (演示)

javascript - Backbone.js - Todo Collection - 这个返回语句中到底发生了什么?

javascript - 如何从路径连接多个div?