如果它是您在服务器上的视图中呈现的 PartialView,那么 Dave 的方法效果最好。只需将您的代码连接到 DOM 就绪事件。
$(document).ready(function(){
//Javascript logic to fire goes here
});
或者如果您使用速记版本...
$(function(){
//Javascript logic to fire goes here
});
如果您正在渲染通过 Ajax 加载的局部视图,那么同样的方法将起作用。如果我没记错的话,一旦它附加到 DOM,jQuery 将在通过 Ajax 传递回客户端的 html 中运行 javascript(随意测试一下,我只是凭记忆了解它一旦附加到 DOM 就会触发,但我相信这一点是该load()
方法的一个特性),假设您要运行的 javascript 在响应中。如果它在发送 Ajax 请求的父页面中,那么您最好将其连接到完整事件。(我在这里填充客户端的参数)
$("#wrapperAwaitingContent").load("/Grids/MyGridPartial", {id: null /*parameters*/}, function(text, status, xhr){
//Javascript logic to fire goes here
});
对我来说,调用中使用的 url.load()
是使用服务器上的 UrlHelper 解析的
$("#wrapperAwaitingContent").load("@Url.Action("MyGridPartial", "Grids")", {id: null /*parameters*/}, function(text, status, xhr){
//Javascript logic to fire goes here
});
您还可以选择使用 Unobtrusive Ajax 执行类似的操作。(我在这里填充服务器端的参数)
@Ajax.ActionLink("Load Data", "MyGridPartial", "Grids", new { id = null/*parameters*/ }, new AjaxOptions() { UpdateTargetId = "wrapperAwaitingContent", OnComplete="onCompleteMethodName" })
除了接收 HTML 的元素和完成时调用的方法之外,您还可以为 AjaxOptions 设置更多属性,但我发现我将重用在共享 javascript 文件中定义的函数并仅在尚未填充它们时填充它们从那里,像这样的东西......
$("a[data-ajax='true']").each(function () {
var ajaxUpdate = $(this).closest("data-ajax-container");
$(this).attr("data-ajax-update", $(this).attr("data-ajax-update") ? $(this).attr("data-ajax-update") : ajaxUpdate);
$(this).attr("data-ajax-mode", $(this).attr("data-ajax-mode") ? $(this).attr("data-ajax-mode") : "replace");
$(this).attr("data-ajax-success", $(this).attr("data-ajax-success") ? $(this).attr("data-ajax-success") : "AjaxSuccess");
$(this).attr("data-ajax-complete", $(this).attr("data-ajax-complete") ? $(this).attr("data-ajax-complete") : "AjaxComplete");
$(this).attr("data-ajax-failure", $(this).attr("data-ajax-error") ? $(this).attr("data-ajax-error") : "AjaxError");
});