我有一个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");
}
}
我仍然无法解决这个问题,但我认为在某人的帮助下我更接近解决方案。
提前致谢
答案 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”);
即使我此刻感到非常愚蠢,我也会发布我的回答以防其他人出现并遇到类似问题。不要忘记您的脚本文件,并且在尝试修复一个奇怪的问题时不要遗漏任何内容。感谢所有看过这个并试图提供帮助的人。