ASP.NET MVC的ActionLink VS RedirectToAction在区域的图像(A

2019-10-19 16:17发布

我对此是有点硬的图像的问题来解释,所以希望这将是有意义的。 我使用ASP.NET MVC 4剃刀。 我有一个区域设置和我使用的是布局页,在根目录下。 一切工作正常,除了一个小问题。 当我在一个地区使用ActionLink的,我的页面呈现就好包括除了页面上的图像的布局页面。 如果我在我的控制器使用RedirectToAction,一切都呈现细包括图像。 我可以看到图像的位置是不同的渲染,但我不知道为什么或如何解决它。

这里是我的布局页面,位于根:

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8" />
        <title>@ViewData("Title") - eLAD</title>
        <link href="~/favicon.ico" rel="shortcut icon" type="image/x-icon" />
        <meta name="viewport" content="width=device-width" />
        @Styles.Render("~/Content/css")
        @Scripts.Render("~/bundles/modernizr")
    </head>
    <body>
       <div id="container">
         <header>
            <div class="content-wrapper">
                <div class="float-left">
                    <p class="site-title"><img src="../../Images/digital_blue_std.jpg" alt="" height="50px" style="vertical-align:middle" /> @Html.ActionLink("company name", "Index", "Home")</p>
                 </div>
                <div class="float-right">
                    <section id="login">
                        @Html.Partial("_LoginPartial")
                    </section>
                    <nav>
                        <ul id="menu">
                            <li>@Html.ActionLink("Home", "Index", "Home", New With {.area = ""}, Nothing)</li>
                            <li>@Html.ActionLink("About", "About", "Home", New With {.area = ""}, Nothing)</li>
                            <li>@Html.ActionLink("Contact", "Contact", "Home", New With {.area = ""}, Nothing)</li>
                        </ul>
                    </nav>
                </div>
            </div>
        </header>
        <div id="body">
            @RenderSection("featured", required:=false)
            <section class="content-wrapper main-content clear-fix">
                @RenderBody()
            </section>
         </div>
        <footer>
            <div class="content-wrapper">
                <div class="float-left">
                    <p>&copy; @DateTime.Now.Year</p>
                </div>
            </div>
        </footer>
       </div>
        @Scripts.Render("~/bundles/jquery")
        @RenderSection("scripts", required:=False)

     </body>
</html>

我有一个名为OwnedQuote,大多数我的意见和控制器是在一个地区,所以我们可以说我有这个URL / OwnedQuote / AircraftRegNumber /创建我得在控制器使用RedirectToAction(省略了URL的HTTP localhost部分由于堆栈溢出的要求)。 如果在这种情况下看图像的属性为图像的URL是:/Images/digital_blue_std.jpg这是我想要的。 但是,如果是在同一地区使用ActionLink的从页面到另一个页面,对于同一个图像的URL是:/OwnedQuote/Images/digital_blue_std.jpg。 注意,除了现在的区域,因为图像不会在这个位置,这是一个问题。 我的动作链接命令就是:

@Html.ActionLink("Referral to UW", "ReferToUW", "Referral", New With {.id = Model.Aircraft.ID}, Nothing)

一切从布局页和身体部分是正确的。 所以我不知道为什么图像URL中使用Html.ActionLink VS RedirectToAction时是不同的。 我需要它来充当一样RedirectToAction。

Answer 1:

首先,不要使用一样,在您的应用程序路径。 你想用一个已知的参照点。 由于您使用MVC 4,使用剃刀2,剃须刀本身了解您的网站的根。 所以,你只需要做这样的事情:

<img src="~/Images/myImage.jpg">

在哪里〜是你的站点的根目录。 在MVC3您必须使用Html.Content这样的:

<img src="@Html.Content("~/Images/myImage.jpg")" >

原因你的问题是,你在不同的URL的结束了,因为MVC路由默认动作处理的,您可以查看来自两个不同的URL路径相同的动作。 问题是图像不同时存在两个路径偏移,所以你得到的问题。 使用本网站的相对路径解决问题。

记住,当你做这样的事情“../../blah”,就需要从URL路径,而不是网页的操作路径的相对路径。 这是因为浏览器加载图像,而不是服务器,浏览器不知道比它目前的路径是任何其他。



文章来源: ASP.NET MVC ActionLink vs RedirectToAction for images in areas