【问题标题】:MVC Deployment resource URLS not resolvingMVC 部署资源 URL 未解析
【发布时间】:2013-08-08 13:46:22
【问题描述】:

我的网址解析不正确。 当我部署我的应用程序名称时,网址中会省略。 它的假设是: http:////内容/图像/等 但它被渲染为 http:///内容/图像/等 这显然不能解决。 我的网址如下所示:

<img src="/Content/images/Misc/Lock.png" />

如果我将 ~ 添加到 url(在内容之前),它会在部署时完美解析,但会在我的开发环境中中断。

这是一个 MVC 应用程序,这意味着我还有一些对操作(控制器/操作/)的 ajax 调用,这些调用也无法解析,从而破坏了网站的大部分内容。

我在 IIS 的默认网站下部署,无法将其移动到另一个网站。

任何建议将不胜感激。

【问题讨论】:

    标签: c#-4.0 asp.net-mvc-4 resources


    【解决方案1】:

    您是否尝试过使用Url.Content

    应该是这样的(未经测试)

    &lt;img src="@Url.Content("~/Content/images/Misc/Lock.png")" /&gt;

    【讨论】:

    • 谢谢瑞克。这解决了我的图像问题,但我的 ajax 调用仍然无法正常工作。调用发生在脚本文件中,因此 HTML 帮助器不可用。
    • 在没有看到您的系统或 javascript 有多复杂的情况下,我成功使用的一种解决方案是在视图中呈现隐藏的 '' 元素并使用MVC 扩展方法来创建 ajax url。这样,如果您的路由表发生变化,您的 ajax 调用就会自动更新。然后使用您的 javascript 通过 ID 定位锚点并获取 ajax url。
    • 这些电话并不花哨。来自脚本文件的简单 Ajax 调用,该脚本文件使用脚本标签 $.ajax({ type: "POST", url: "/Controller/Action", traditional: true, contentType: 'application/json', data: JSON.stringify({ json }) }).done(function (resp) {
    • 那么您执行我的建议会很简单。这就是我解决您遇到的相同问题的方法,并且它具有将来对您的 URL 进行校对的附带好处。
    • 谢谢瑞克!我结合了你和 Maess 的答案
    【解决方案2】:

    这与您的主机有关,如果您将此站点作为子站点而不是在其自己的 IIS 站点下运行,则主机需要 ~.我已经通过使用全局 javascript 变量来保存站点根目录来解决这个问题。我在主站点布局中填充变量,如下所示:

    var gSiteRoot = '@MvcHtmlString.Create(Url.Content("~/"))';
    

    然后当我需要在 js 中构造一个 url 时,我会这样使用它:

     var url = gSiteRoot + 'restofurl';
    

    【讨论】:

    • 我这样做的原因是你不能在js文件中使用HTML助手。如果你不使用 js 文件,就使用 Rick B 的建议。
    • 同意。这是我建议的替代方案,也是一个很好的解决方案。您选择的内容应取决于对您正在构建的系统最有意义的内容。
    • 感谢梅斯!我结合了你和里克的答案。不幸的是,我只能将一个回复标记为答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-01
    • 1970-01-01
    • 2019-08-10
    • 1970-01-01
    • 1970-01-01
    • 2021-01-08
    相关资源
    最近更新 更多