【发布时间】:2012-01-07 17:58:56
【问题描述】:
我有以下代码作为 jquery 脚本的一部分来打开一个 jqueryui 对话框(id 值是硬编码的,用于测试目的):
open: function (event, ui) {
$(this).load("@Url.Action("Edit", "Person",
new
{
id = Guid.Parse("28769371-7518-49db-a5ea-b9c62621a609"),
selectedPersonFor = Model.SelectedPersonFor,
selectedPersonForId = Model.SelectedPersonForId,
clientAccountId = Model.ClientAccountId
})");
},
我遇到的问题是,即使我的对话框打开,控制器操作也永远不会被触发。
如果我在浏览器中查看源代码,生成的输出是:
open: function (event, ui) {
$(this).load("/Person/Edit/28769371-7518-49db-a5ea-b9c62621a609?selectedPersonFor=ClientAccount&selectedPersonForId=2a2dd3b9-a73b-4afa-8237-5a4f37736f8a&clientAccountId=00000000-0000-0000-0000-000000000000");
},
我发现,如果我将上面的 URI 硬编码到我的脚本中,并用非转义的 & 符号 (&) 替换转义的 & 符号,那么我的控制器操作就会受到影响。
我尝试在脚本中添加对 replace 方法的调用以消除转义的 & 符号,但这无济于事。当我查看为调用控制器操作而生成的同一页面中的其他 URI 时,但不在脚本中,我注意到它们已经在其中转义了 & 符号。
浏览器如何处理脚本对控制器操作的调用与它如何从脚本外部执行它似乎存在一些差异 - 所有这些都与转义的&符号有关。
有人可以指导我如何克服这个问题吗?
更多信息:
我也尝试过将查询参数传递给加载函数,如下所示:
open: function (event, ui) {
$(this).load("@Url.Action("Edit", "Person")",
{
id: @Guid.Parse("28769371-7518-49db-a5ea-b9c62621a609"),
selectedPersonFor: Model.SelectedPersonFor,
selectedPersonForId: Model.SelectedPersonForId,
clientAccountId: Model.ClientAccountId
});
},
但是,当我这样做时,我的对话框甚至不会打开。
编辑:
为了响应显示路线的请求,我提供以下信息(希望这是所要求的):
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
我只是使用我的 asp.net mvc3 项目提供的默认路由。
【问题讨论】:
-
显示路线会更容易回答
标签: asp.net-mvc-3 razor escaping jquery-ui-dialog