我正在使用Loading a partial view in jquery.dialog中解释的@Darin Dimitrov方法,允许用户点击其中一条私人消息并在模式框中查看。我使用ASP.NET MVC3和Razor作为我的视图引擎。但是我在使用这个工作时遇到了一些麻烦...以下是我到目前为止所做的尝试:
消息显示在表格中:
<tr id="@item.Id" class="openConversationLink">
<td class="newMessageStatus">@MessageStatus(item)</td>
<td class="msgSenderName">@item.Sender</td>
<td class="msgSubject">@item.Subject</td>
<td class="msgLastUpdated">@item.LastUpdated</td>
<td class="modalItemActions"></td>
</tr>
在同一局部视图中,我得到了以下脚本块:
<script type="text/javascript">
$(function () {
$("#conversationModal").dialog({
autoOpen: false,
width: 850,
height: 600,
resizable: false,
draggable: false,
modal: true,
open: function (event, ui) {
var convId = ui.attr('id');
alert(convId);
$(this).load('@Url.Action("Conversation", "Message", new { conversationId = convId})');
}
});
$(".openConversationLink").click(function () {
$("#conversationModal").dialog('open');
});
});
</script>
基本上,我不确定event
处理程序中的ui
和open
参数是什么意思。因此,对两者的一点解释将不胜感激。但无论如何,即使消息现在也不显示,我仍然会收到这些错误:
编译器错误消息:CS0103: 名称“convId”不存在于 目前的背景。资源: $(本).load('@ Url.Action( “对话”, “消息”,新{conversationId = convId})');
基本上,在我实际点击其中一行(打开对话对话框)之前,我不希望该行被触发,但是当消息页面打开时,它似乎实际上被触发了。
更新
现在是我的jQuery代码:
$(function () {
$("#conversationModal").dialog({
autoOpen: false,
width: 850,
height: 600,
resizable: false,
draggable: false,
modal: true,
open: function (event, ui) {
var convId = event.target.attr('id');
alert(convId);
$(this).load('Message/Conversation/' + convId);
}
});
$(".openConversationLink").click(function () {
$("#conversationModal").dialog('open');
});
});
有什么可以做的吗? :)
答案 0 :(得分:1)
在继续之前,您需要了解关键问题&gt;
Url.Action()方法正在服务器端。无论传递给它,都必须在服务器端决定。在客户端Javascript中声明的任何变量都完全忽略了服务器端代码,因此编译器试图在服务器端代码中找到convId,显然无法找到它。所以它给出了错误。
现在说,我们需要找到一种方法将convId传递给服务器。为此,您需要在客户端进行一些手动字符串连接。你可以做这样的事情&gt;
'@Url.Action("Conversation", "Message")' + '?conversationId='+convId
您看到我们使用服务器端代码生成/Message/Conversation
,然后在客户端连接它以使其/Message/Conversation/?conversationId=valueOfconvId
我希望它有道理:)
修改强>
<script type="text/javascript">
var clickedId;
$(function () {
$("#conversationModal").dialog({
autoOpen: false,
width: 850,
height: 600,
resizable: false,
draggable: false,
modal: true,
open: function (event, ui) {
$(this).load('Message/Conversation/' + clickedId);
}
});
$(".openConversationLink").click(function () {
clickedId = $(this).attr("id");
$("#conversationModal").dialog('open');
});
});
</script>
现在有意义吗?我们将点击的tr
的ID保存在全局变量