【问题标题】:Display image from file path asp.net mvc4从文件路径 asp.net mvc4 显示图像
【发布时间】:2015-08-04 17:25:53
【问题描述】:

我正在尝试在我的 asp .net mvc4 项目的根文件夹之外显示图像 - 无济于事。 我在 .master 页面和 .ascx 控件中尝试过的 img 标签是:

<img src='@Url.Action("someimage", "imagesController")' />

我的控制器看起来像:

class imagesController : Controller
{
    public ActionResult someimage()
    {
        return File(@"C:\...\image.png", "image/png");
    }
}

上面的方法没有被调用,而是我得到一个:http://localhost:62372/Builder/@Url.Action(%22someimage%22,%20%22imagesController%22) 加载资源失败:服务器响应状态为 500(内部服务器错误)

这是我的路线,以防万一:

public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        routes.IgnoreRoute("{*favicon}", new { favicon = @"(.*/)?favicon.ico(/.*)?" });

        //--default routing and default route--
        routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Login", action = "OpenLogin", id = UrlParameter.Optional } // Parameter defaults
        );

    }

我收集了有关该错误的更多信息: 异常信息:

异常类型:ArgumentException

异常消息:路径中有非法字符。

在 System.IO.Path.CheckInvalidPathChars(字符串路径)

在 System.IO.Path.Combine(String path1, String path2)

...

【问题讨论】:

  • 您需要获取一般 500 错误的详细信息。为 IIS 启用远程错误,您还没有这样做。但这可能是文件权限问题。
  • 我正在使用 VS2010 调试器,我应该为此切换到 IIS 吗?
  • 是否可以调用控制器中的方法并将值保存在 ViewBag 变量中?然后,您可以在页面上调用该变量,而不必担心有一个方法来提供它。
  • 一开始没有调用控制器中的方法
  • 对,我是说根本不要那样做,你应该在调用该页面的 ActionResult 时提供该图像位置。

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


【解决方案1】:

一种解决方案是在页面加载之前查找图像路径并将其传递给 ViewBag 变量中的视图。这并不能解决您的 500 错误,但您可能不需要以这种方式解决此问题。

控制器:

public ActionResult ImagePage()
    {
       ViewBag.ImageSrc = GetMeMyImagePath();
       return View();
    }

查看

<img src='@ViewBag.ImageSrc' />

【讨论】:

  • 路径作为用户输入的一部分动态查找
  • 您可能想研究使用 jquery 和 Ajax 请求来处理更新该标签。
  • 用户如何输入这张图片的位置?如果您有一个字符串,您可以简单地使用一些 javascript 将其推送到 src 属性中。此外,如果您不知道 Google 它的工作原理,Ajax 是一个非常有用的工具,可以将数据获取到您的页面。
  • 问题是 src 位置在项目文件夹之外,因此一些浏览器出于安全考虑将图像屏蔽了。这就是为什么我需要从控制器返回图像
  • 那么我的建议是有一个表单将图像路径发布回您的控制器并在那里处理它。
【解决方案2】:

最后我改用这个语法让它工作了:

<img src='http://domain/images/someimage' alt='' />

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-10
    • 2019-01-08
    • 1970-01-01
    • 1970-01-01
    • 2011-11-16
    • 2016-06-12
    • 1970-01-01
    • 2019-01-13
    相关资源
    最近更新 更多