asp.net-mvc-3 – 通过使用jQuery Script调用URL.Action生成的UR
我有以下代码作为
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,"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项目提供的默认路由. 解决方法
在Razor中,@运算符用于HTML编码输出=> &安培;成为& amp;如果您不希望发生这种情况,可以使用Html.Raw帮助器:
var url = '@Html.Raw(Url.Action("Edit",new { id = Guid.Parse("28769371-7518-49db-a5ea-b9c62621a609"),clientAccountId = Model.ClientAccountId }))'; $(this).load(url); 现在让我们考虑你的第二个代码片段: $(this).load("@Url.Action("Edit",{ id: @Guid.Parse("28769371-7518-49db-a5ea-b9c62621a609"),clientAccountId: Model.ClientAccountId }); 如果您查看呈现的HTML,您将看到: $(this).load("@Url.Action("Edit",{ id: 28769371-7518-49db-a5ea-b9c62621a609,clientAccountId: Model.ClientAccountId }); 这显然不起作用,因为Model.SelectedPersonForId可能不是一个有效的javascript变量,所以你得到一个javascript错误.此外,28769371-7518-49db-a5ea-b9c62621a609不是有效的javascript表达式,因为您没有用引号括起来. 如果你想要这个工作,请确保你生成适当的内容: $(this).load("/Person/Edit",{ id: '@Guid.Parse("28769371-7518-49db-a5ea-b9c62621a609")',selectedPersonFor: '@Model.SelectedPersonFor',selectedPersonForId: '@Model.SelectedPersonForId',clientAccountId: '@Model.ClientAccountId' }); 注意在每个服务器端变量之前使用的@运算符,而不仅仅是在Guid之前.另请注意,值包装为javascript字符串. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- ASP.NET Identity会话cookie的安全性如何?
- asp.net-mvc – 如何在没有模型的情况下为@ Html.TextBox()
- asp.net-mvc – Asp.net MVC 3路由区域失败
- asp.net – 如何删除linq到sql?
- asp.net-mvc-3 – 剃刀中的部分的默认内容
- entity-framework – 将ASP.NET Core EF发布到Azure无法加载
- 实验四:搭建动态论坛(ASP+ACCESS)
- asp.net-mvc – 使用数据注释进行自定义验证
- asp.net – 错误:“无法读取配置部分’system.webServer /
- 使用asp.net中的web api通过http进行身份验证