Url.Action 在我的 url 中放了一个 &,我该如何解决这个问题?
Posted
技术标签:
【中文标题】Url.Action 在我的 url 中放了一个 &,我该如何解决这个问题?【英文标题】:Url.Action puts an & in my url, how can I solve this? 【发布时间】:2012-02-01 10:46:05 【问题描述】:我想将变量 itemId 和 entityModel 发送到 ActionResult CreateNote:
public ActionResult CreateNote(
[ModelBinder(typeof(Models.JsonModelBinder))]
NoteModel Model, string cmd, long? itemId, string modelEntity)
使用这个javascript:
Model.meta.PostAction = Url.Action("CreateNote", new cmd = "Save", itemId = itemId, modelEntity = modelEntity);
但是,正在发送的 url 是
localhost:1304/Administration/blue/en-gb/Entity/CreateNote?modelEntity=Phrase&itemId=44
我要发送
localhost:1304/Administration/blue/en-gb/Entity/CreateNote?modelEntity=Phrase&itemId=44
如何防止 Url.Action 将 & 放在我要发送的第二个变量前面?
【问题讨论】:
是什么让你觉得&
不行?
因为当我用断点查看 ActionResult 时,当我有 localhost:1304/Administration/blue/en-gb/Entity/CreateNote?modelEntity=Phrase&itemId=44 modelEntity = Phrase 和 itemId =空。当我在 javascript 中将它们转过来并获得 localhost:1304/Administration/blue/en-gb/Entity/CreateNote?itemId=44&modelEntity=Phrase itemId = 44 和 modelEntity = null 时。这就是为什么我认为它与 &
@Oded — 因为数据被插入到 JavaScript,而不是 html。
【参考方案1】:
我昨天没有注意到你有&
我以为是 SO 编辑器改变了它。尝试将您的 Url.Action()
包装在 @Html.Raw()
中以防止 & 的编码。
或者仅Url.Action()
控制器/动作位并将两个参数作为发布数据而不是直接在url上传递,jQuery应该以这种方式为您整理&。
【讨论】:
这个解决方案有效,但为什么 Url.Action 甚至被编码?谈论意外行为。【参考方案2】:我认为您的问题在于 Model.meta.PostAction
- 该属性是 string
吗?
如果是这样,那么我的猜测是您将其添加到页面中:
剃刀:@Model.meta.PostAction
ASP 视图引擎:<%:Model.meta.PostAction%>
两者都会自动为您编码该字符串。
要修复它,请使用@Html.Raw()
/<%=
(两者都不编码)或将PostAction
属性设置为知道它已被编码的IHtmlString
:
string actionUrl = Url.Action("CreateNote", new cmd = "Save", itemId = itemId, modelEntity = modelEntity);
Model.meta.PostAction = new HtmlString(actionUrl);
【讨论】:
以上是关于Url.Action 在我的 url 中放了一个 &,我该如何解决这个问题?的主要内容,如果未能解决你的问题,请参考以下文章