【问题标题】:How replace '~' symbol in MVC with physical path如何用物理路径替换 MVC 中的“~”符号
【发布时间】:2017-03-14 09:09:54
【问题描述】:

在 Mvc 应用程序中如果添加了 Layout

@Styles.Render("~/Content/themes/base/css")
@Scripts.Render("~/bundles/jquery") .

需要更换解决方案

~

symbol 。所以输出不应该像 /Content/themes/base/jquery.ui.core.css 在渲染页面中。

相反

localhost:xxxxx/Content/themes/base/jquery.ui.core.css.

在 IISExpress 下运行 mvc 应用程序时需要添加此 Localhost,其中在托管到服务器时将其修改为托管应用程序路径

【问题讨论】:

  • 或许您可以尝试使用Styles.RenderFormat 而不是Styles.Render:@Styles.RenderFormat("<link href='" + @Request.Url.Host + "/{0}' rel='stylesheet' type='text/css' />", "~/Content/themes/base/css")。
  • 已尝试使用此选项,但 system.web.optimization 中不存在 RenderFormat 方法
  • 尝试更新安装包 Microsoft.AspNet.Web.Optimization
  • System.Web.Optimization 应该有RenderFormat 方法:msdn.microsoft.com/en-us/library/…。尝试更新Microsoft.AspNet.Web.Optimization 包。

标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-4 model-view-controller


【解决方案1】:

据我所知,.Render() 调用中使用的路径只是一个标识符或键,它将为之前添加到其中的文件生成路径。

这是您通常在BundleConfig.cs 中找到的内容:

bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
              "~/Scripts/jquery-{version}.js"));

~/bundles/ 部分在调用.Render() 时从不发送到输出。发送的是来自.Include() 调用的实际(翻译)路径。

您应该始终使这些路径以"~/" 开头,以便正确输出它们。我从来没有发现需要包含服务器名称,因为默认情况下浏览器会从提供网页的同一服务器请求文件。

【讨论】:

  • 对,相对路径 ~/ 符号是捆绑方案的一部分,无法更改,我发现它在视图侧呈现没有主机名部分(即 localhost)的相对 URL 路径。恕我直言,OP希望在浏览器中呈现视图时显示主机名部分,例如绝对路径。
  • 最好调查一下为什么 OP 认为他在这些路径中需要 server:port。答案可能是基于对相对路径在浏览器中的工作方式的误解,或者在哪里以及如何使用 "~/" 前缀作为 MVC 中的路径前缀。
  • 我正在将视图呈现为 HTML 字符串,但输出的 HTML 不包含 Scripts 和 Styles 的物理位置。因此,如果我们将该 HTML 字符串保存到 HTML 页面中。然后不添加 Jquery 和 Styles
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-02-18
  • 1970-01-01
  • 1970-01-01
  • 2012-08-17
  • 1970-01-01
  • 2011-02-19
  • 1970-01-01
相关资源
最近更新 更多