【问题标题】:How do I use @Url.Content() in non-MVC Razor webpage?如何在非 MVC Razor 网页中使用 @Url.Content()?
【发布时间】:2014-06-13 14:21:40
【问题描述】:

因为我使用的是安装了 NuGet 包的 Microsoft.AspNet.Razor 的 Web 应用程序。

在 WebForm 页面 (.aspx) 中,我可以使用 ResolveUrl() 但在 Razor 页面 (.cshtml) 中,我收到此错误 -->

"x:\Source\Foo.Dealer\Foo.Dealer.WebApp.Mobile\Member\DmsDashboard.cshtml(103): error CS0103: The name 'Url' does not exist in the current context"

源代码在这里..

@section HeadJavascriptLibraryFile
{
    <script type="text/javascript" src="@Url.Content("~/scripts/webpages/setting-dmsdashboard.js")"></script>
}

<img src="@(Url.Content("~/images/miscellaneous/reportandpiechart2.png"))" alt="" />

根据要求提供源代码...

//LayoutMembmerGeneral.cshtml
@using Foo.Dealer.WebApp.Mobile.Infrastructure;
@{
    if (LoginManagementTools.DealerUserLoginValidation_BrowsingPage(HttpContext.Current.Request, HttpContext.Current.Response, HttpContext.Current.Session) == false) { }
}<!DOCTYPE html>
<html>
<head>
  <title>@Page.Title</title>
  @RenderSection("HeadJavascriptLibraryFile", false)
</head>
<body>
@RenderBody()
</body>
</html>

//DmsDashboard.cshtml...
@using Foo.Dealer.WebApp.Mobile.Infrastructure
@using System.Web.Mvc;

@{
    Page.Title = "A New Dawn In Auto Pricing";
    Layout = "LayoutMemberGeneral.cshtml";
}
@section HeadJavascriptLibraryFile
{
}

<div id="WebLayout1">
    <img src="@Url.Content("images/miscellaneous/reportandpiechart2.png")" alt="" />
</div>

【问题讨论】:

  • 另外你运行的是什么版本的 Visual Studio?
  • 当您添加@using System.Web.Mvc 时,智能感知是否启动? (顺便说一下,没有分号)
  • 是的,它确实开始了。

标签: asp.net razor razor-2


【解决方案1】:

在 ASP.Net 网页中似乎不存在 URL 帮助器(这实际上是您正在尝试做的事情),但您可以简单地使用以下代码来实现相同的效果:

&lt;img src="~/images/miscellaneous/reportandpiechart2.png" alt="" /&gt;

波浪号 (~) 引用应用程序根目录,并在页面编译并发送到客户端时进行转换。

【讨论】:

  • 问题是如果将文件移动到不同的路径,为什么还要继续重命名文件路径。
  • 我不确定你的意思 - 上面的内容基本上与@Url.Content(...) 做同样的事情,所以无论如何你都会遇到同样的问题。
  • @TrueBlueAussie Razor 视图在 MVC 上下文之外使用时属于 ASP.Net Web Pages 域,即直接使用 .cshtml 页面的能力。我并不否认他们使用 Razor 视图这一事实,它与 MVC 无关,所以你必须知道什么是可用的,什么是不可用的。
  • 对,但问题是在 ASP.Net 网页中这种方式的 Url.Content 是什么?
  • @fletchsod 我的例子是等价的:)
【解决方案2】:

波浪号 (~) 不会转换为任何 data- 属性的一部分,并且可能在其他地方也不会转换,尽管我没有进行广泛的研究。

如果您碰巧在自动转换不起作用的地方需要此信息,则可以使用波浪号等效项 HttpContext.Current.Request.ApplicationPath

在大多数 Razor 视图中,您应该能够将其缩短为以下内容:

@Request.ApplicationPath

参考:http://msdn.microsoft.com/en-us/library/system.web.httprequest.applicationpath.aspx

在某些情况下,另一种选择是使用VirtualPathUtility,例如:

@VirtualPathUtility.ToAbsolute("~/")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-06
    • 1970-01-01
    • 1970-01-01
    • 2011-10-09
    • 2011-12-01
    • 2014-07-11
    相关资源
    最近更新 更多