【发布时间】:2015-12-24 10:20:52
【问题描述】:
这是“Js file not loaded after partial view is refreshed”的分支问题。 问题是如果我把我的脚本放到主视图中,它就不能部分工作。 我的自定义脚本:
$(function() {
$.ajaxSetup({ cache: false });
var timer = window.setTimeout(function () {
$(".alert").fadeTo(1000).slideUp(1000, function () {
$(this).hide();
});
}, 3000);
$("[data-hide]").on("click", function () {
if (timer != null) {
clearTimeout(timer);
$(this).closest("." + $(this).attr("data-hide")).hide();
}
});
});
我需要使用我的脚本的照片部分视图:
<div class="well">
<h3>
<strong>@Model.Name</strong>
<span class="pull-right label label-primary">@Model.AverageRaiting.ToString("# stars")</span>
</h3>
<span class="lead">@Model.Description</span>
@Html.DialogFormLink("Update", Url.Action("UpdatePhoto", new {id = @Model.PhotoId}), "Update Photo", Url.Action("Photo"))
@Html.Action("InitializeAlerts")
</div>
部分视图“_Alert”渲染到我需要使用上述脚本的部分:
@{
var alerts = TempData.ContainsKey(Alert.TempDataKey)
? (List<Alert>)TempData[Alert.TempDataKey]
: new List<Alert>();
if (alerts.Any())
{
<hr />
}
foreach (var alert in alerts)
{
var dismissableClass = alert.Dismissable? "alert-dismissable" : null;
<div class="alert alert-@alert.AlertStyle fade in @dismissableClass">
@if (alert.Dismissable)
{
<button type="button" class="close" aria-label="close" data-hide="alert">×</button>
}
@Html.Raw(alert.Message)
</div>
}
}
【问题讨论】:
-
将脚本放置在主布局中,而不是局部。然后使用所示的委托事件处理程序。这应该适用于所有部分视图。
-
@TrueBlueAussie 现在我把它放在部分照片的主视图中。如果我在其他视图中不需要此脚本,我认为在布局中加载它是不好的。
-
一旦加载,无论你是否使用,开销都是一样的。这是一个非常小的脚本。只需将其加载到 main 中,一次,不要让自己的生活变得更艰难:)
-
@TrueBlueAussie 谢谢你的好建议,但你能解释一下为什么我把它放在主照片视图中它不起作用吗?
-
当然:请解释一下您的主照片视图是什么...是部分视图,还是完整视图?它是如何加载的?是上面显示的那个(没有命名)吗? :)
标签: javascript jquery asp.net-mvc