Questa è una domanda di settore "Js file not loaded after partial view is refreshed". Il problema è che se metto il mio script nella vista principale non funziona in modo parziale. mio script personalizzato:Il file JS non funziona in visualizzazione parziale dopo l'aggiornamento
$(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();
}
});
});
The Photo parziale vista in cui ho bisogno di usare il mio script:
<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>
E vista partail "_Alert", che rende per la parziale dove ho bisogno di usare lo script sopra:
@{
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 [email protected] fade in @dismissableClass">
@if (alert.Dismissable)
{
<button type="button" class="close" aria-label="close" data-hide="alert">×</button>
}
@Html.Raw(alert.Message)
</div>
}
}
Posizionare lo script in il tuo layout principale, non in modo parziale. Quindi utilizzare il gestore eventi delegato mostrato. Questo dovrebbe funzionare su tutte le viste parziali. –
@TrueBlueAussie In questo momento l'ho messo nella vista principale della foto parziale. Penso che sia brutto caricarlo nel layout se non ho bisogno di questo script in altre viste. – user3818229
Una volta caricato, l'overhead è lo stesso sia che lo si usi o meno. È una sceneggiatura molto piccola. Basta caricarlo in main, una volta, e non rendere la vita più difficile per te :) –