【发布时间】:2012-07-26 16:34:47
【问题描述】:
在我的模态对话框中添加一个 jQuery 组件时遇到了一个有趣的问题。 jQuery ui 元素(简单的颜色插件,位于http://recursive-design.com/projects/jquery-simple-color/)被渲染了两次!经过调查,我发现模态对话框(即部分视图)本身被渲染了两次。这是我主要观点的相关代码:
// Here is the jQuery:
@section Head
{
<script type="text/javascript">
$(document).ready(function () {
$("#addUserDialog").dialog({ modal: true, autoOpen: false, buttons: [
{
text: "Submit",
click: function() {
$("#addUserForm").submit();
}
},
{
text: "Cancel",
click: function() {
$(this).dialog("close");
}
}]
});
$('#addUser').click(function () {
$("#addUserDialog").dialog("open");
});
</script>
}
// And here is the rendering of the partial view:
<div id="addUserDialog" title="Add User" style="display:none">
@Html.Partial("AddUserView", ViewData["user"])
</div>
局部视图模态对话框在这里:
@model UserModel
<script type="text/javascript">
$(function () {
alert("addUser");
$.validator.unobtrusive.parse("#addUserForm");
$(".colorPicker").simpleColor();
});
var closeAddUserDialog = function () {
$("#addUserDialog").dialog("close");
};
</script>
@using (@Ajax.BeginForm("addUser",
"OnCallControl",
new AjaxOptions
{
HttpMethod = "Post",
InsertionMode = InsertionMode.Replace,
UpdateTargetId = "userTable",
OnSuccess = "closeAddUserDialog"
},
new { id = "addUserForm" }))
{
... // Other form inputs
<input class="colorPicker" value="#cc3333" />
}
在首次打开页面时会出现两次警报语句。有趣的现象:我有另一个模态对话框,格式相同,有类似的警报语句(例如alert("editUser");),两个警报语句按顺序出现两次(addUser、editUser、addUser、editUser)。
我的怀疑是我在标题和局部视图中合并 jQuery 的方法不好,但我不知道这是否是导致局部视图中的 jQuery 函数执行两次的原因。有没有人知道为什么会这样?如果我的怀疑是正确的,我该如何纠正这种情况?
其他信息:
我确信这个问题来自索引视图或部分对话框视图中的某个地方,因为在视图的初始 GET 请求中没有从其他任何地方调用模式。
当我将对话框声明移至单击事件函数(替换 dialog("open") 命令,删除了 autoOpen: false 选项)时,该对话框在初始 GET 时仅发生一次警报。重复的 jQuery colorPicker 小部件令人费解地仍然存在。
【问题讨论】:
-
这是一件事......每次使用 .dialog() 初始化 JQuery 对话框时,即将成为对话框的 DIV 都会从 DOM 中剥离出来并复制或移动(不要记住哪个 ) 到页面底部,以确保它不在任何其他子 DIV 下。所以让我问你这个......你有多个地方可以渲染你的标题部分吗?
-
@Shenaniganz 不,只有一个。
-
你的 renderSection 到底在哪里?
-
@Shenaniganz 在主 _Layout 文件中,在
<head>标记内。 -
你能确认你的局部视图中没有布局指针吗? ...我感觉 $("#addUserDialog").dialog( 初始化被调用了两次并试图找出原因
标签: jquery asp.net-mvc-3 jquery-ui