是不是ASP.NET MVC _layout.cshtml类似于Webforms Master页面?

时间:2014-07-25 20:59:42

标签: asp.net-mvc asp.net-mvc-4 razor

我有一个MVC 4项目,其中有一个布局页面,我已经设置了像这样的链接的图像

 <a href="/"><img id="logoImage" src="~/Content/siteImages/myLogo.png" alt="My logo"    title="Welcome to my site" /></a>

我也试过这个:

<a href="/"><img id="logoImage" src="../Content/siteImages/myLogo.png" alt="My logo" title="Welcome to my site" /></a>

而且:

<a href="/"><img id="logoImage" src="@Url.Content("~/Content/siteImages/myLogo.png")" alt="My logo" title="Welcome to my site" /></a>

只要控制器是家庭控制器,这些都可以正常工作。我使用Actionlink @Html.ActionLink("Northwind Demo", "Northwind", "Northwind", null, new { @class="links"})来访问另一个控制器。

单击ActionLink后,我的图像就会消失。我在浏览器中检查了渲染的链接文本,它与以前一样。

src="Content/siteImages/myLogo.png"

但是,当在浏览器的网络选项卡中检查请求时,现在是图像的URL Northwind/Content/siteImages/myLogo.png

无法解决。由于某种原因,浏览器将控制器的名称添加到图像请求的开头。我确信我错过了一些非常愚蠢的东西,但...... 我该如何解决这个问题?

修改
我想知道这是一个只在本地运行时会发生的问题,并且在部署到服务器时可能会消失吗?我仍然无法解决这个问题。

修改
我真的在努力解决以前没有其他人遇到这个问题的事实。我的印象是_layout.cshtml就像是WebFroms中的母版页。我在这里需要一些建议。

修改
所以我有一个成功的时刻。我将进入方法的名称更改为Northwind控制器到索引,并在索引视图中正确显示图像。但是,如果我调用另一个视图,则图像会再次消失。 我使用radion按钮根据选择的视图选择不同的视图:

public ActionResult Search()
    {
        int id = Convert.ToInt32(Request.Form["radio"]);

        switch (id)
        {
            case 1:
                return View("Customer");
            case 2:
                return View("Orders");
            case 3:
                return View("Employees");
            default:
                ViewBag.Error = "Search parameter not found";
                return View("Index");
        }
    }  

我仍然无法解决这个问题,但我认为在某人的帮助下我更接近解决方案。

提前致谢

2 个答案:

答案 0 :(得分:1)

不要在MVC中使用相对寻址,因为您可以告诉您遇到问题,因为可以从多个路径访问视图(即//Home,{{1} }等等。所有相同的视图,但不同的路径,如果您使用/Home/Index,则../whatever变为/Home/Index/Home/whatever/变为{{ 1}})

如果您不在Razor 2+视图中,请始终使用/Home生成网址。如果您使用的是Razor 2或更高版本,则可以使用/whatever

如果这些方法不起作用,那么你需要查看你的应用程序根目录,web.config等等。因为MVC对网站根目录的位置感到困惑。

答案 1 :(得分:1)

好吧,我已经想到了这一点,我觉得自己像个白痴!我有一个脚本文件,我用它来改变图像,当它变得足够小,以便它们继续适应屏幕,因为它变得更小,响应式设计。像这样:

$("#logoImage").attr("src", "Content/siteImages/logoSmall.png");

嗯,失踪/一开始就是造成这个问题的原因。添加/修复我的所有问题。像这样:

$(“#logoImage”)。attr(“src”,“/ Content / siteImages / logoSmall.png”);

即使我此刻感到非常愚蠢,我也会发布我的回答以防其他人出现并遇到类似问题。不要忘记您的脚本文件,并且在尝试修复一个奇怪的问题时不要遗漏任何内容。感谢所有看过这个并试图提供帮助的人。