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