在我的模态对话框中添加一个 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 小部件令人费解地仍然存在。