【问题标题】:How can I use Url.Content() in MVC4 with parameters?如何在 MVC4 中使用 Url.Content() 和参数?
【发布时间】:2016-07-27 03:56:58
【问题描述】:

这是我的代码:

@Url.Content("~/AspNetWebForms/ViewPDF.aspx?id=" + docID.ToString() + "&small=True")

我正在为 MVC4 中的应用程序缓存动态构建我的清单文件。我知道它即将退出(或似乎是),但我仍然需要支持旧版浏览器。

该网站在 MVC 中,但我们确实有几个 ASPX 页面,因为我们需要使用一些旧版控件。因此,在我的清单文件中,我尝试使用 Url.Content() 创建到 ASPX 页面的相对路径,这似乎可以工作,直到我需要添加几个参数并且“&”被编码。没有“&”它似乎可以工作(除了它加载/缓存错误的东西)。

由于它是一个清单文件,我无法进行重定向,因为任何重定向都会导致应用程序缓存失败。

即使它是 MVC4,我也不能只以“~”开头,因为它不会像在图像或锚点中那样被解析。

【问题讨论】:

    标签: c# asp.net-mvc asp.net-mvc-4 caching cache-manifest


    【解决方案1】:

    只需将查询字符串附加到Url.Content 的输出即可。

    @(Url.Content("~/AspNetWebForms/ViewPDF.aspx) + "?id=" + docID.ToString() + "&small=True")
    

    @string.Format("{0}?id={1}&small=true", 
        Url.Content("~/AspNetWebForms/ViewPDF.aspx"), docID.ToString())
    

    【讨论】:

    • 不幸的是,这些都不起作用。它们都产生一个编码的&符号。
    【解决方案2】:

    起初我以为是 Url.Content 对值进行编码,但实际上是 Razor 引擎在执行此操作。 Html.Raw 更正了它,但我确实必须在之后添加一个空行,因为换行符也丢失了。

    @Html.Raw(Url.Content("~/AspNetWebForms/ViewPDF.aspx?id=" + docID.ToString() + "&small=True"))
    

    Paul Abbott 的回答让我得出了这个结论,非常感谢他。

    【讨论】:

    • 必须有更好的方法来做到这一点...类似于 Url.Action 但不必使用控制器?有什么想法吗?
    • @pjdupreez 这不使用控制器。只是 Razor 视图。
    • 是的,我知道,但它不允许您传递参数,类似于 Url.Action(确实需要控制器),因此您必须手动构建查询字符串。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-03
    • 1970-01-01
    • 2013-10-28
    • 1970-01-01
    • 2015-10-15
    相关资源
    最近更新 更多