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 中放了一个 &,我该如何解决这个问题?的主要内容,如果未能解决你的问题,请参考以下文章

使用 url Action 为标签赋值

如何在 Url.Action 中发送多个参数?

Url.Action 是编码参数值

ASP.NET MVC Url.Action 和路由名称值

带有 Url.Action 的 MVC 属性路由未解析路由

Url.Action:如何将参数从视图传递到控制器?