Url.Action 如何工作 Asp.net MVC?

Posted

技术标签:

【中文标题】Url.Action 如何工作 Asp.net MVC?【英文标题】:How does Url.Action work Asp.net MVC? 【发布时间】:2010-12-18 01:37:52 【问题描述】:

这与我问过的另一个问题有些相关,但我想为什么不单独问。

如果我要在视图中放置类似以下内容

<td><img src='<%= Url.Action( "DisplayImage" , "User" , new  id = item.id ) %>'  /></td>

它应该显示这个吗?

<td>
   <img src='/User.mvc/DisplayImage?id=U00915441'  />
</td>

或者 src-attribute 的值实际上会被 UserController GetImage Action 的结果替换吗?

【问题讨论】:

【参考方案1】:

它将构造动作的路径,返回一个url,而不是执行动作的结果。

结果将是:

<td>
   <img src='/User.mvc/DisplayImage?id=U00915441'  />
</td>

示例代码。假设您的用户模型将图像存储在字节数组中。如果您使用 LINQ 并且属性是 Binary,则使用 ToArray() 方法将其转换为字节数组。请注意需要用户登录并使用 GET 请求的属性。

[Authorize]
[AcceptVerbs( HttpVerbs.Get )]
public ActionResult DisplayImage( string id )

     var user = ...get user from database...

     return File( user.Image, "image/jpeg" );

【讨论】:

谢谢。您是否知道使用这种方法应该如何显示图像?我见过的每个显示图像的例子都使用这种方法,我不明白它是如何工作的(因为它不适合我)。我是 mvc 新手,所以这真的很有帮助。 您需要一个名为 DisplayImage 的方法(或 GetImage,两种方法都有,但只有一种方法是正确的),它将用户的 id 作为参数。它需要返回一个 ContentResult,它具有适合图像格式的 mime 类型,例如 image/jpeg、image/gif 或 image/png。您的操作会将图像从数据库中检索到流中,并从该流中构造 ContentResult,设置 mime 类型。 谢谢 tvan。有没有关于如何为存储在字节数组中的图像构造 ContentResult 的示例? 现在我想你可能想要一个 FileContentResult。将更新一些代码。 @Steven - 在从数据库中检索数据时,您将需要一些额外的处理和时间,但我认为构建文件结果与简单地从磁盘上提供文件相当。您还可以使用混合方法,将文件的路径存储在数据库中,然后从磁盘提供文件。从数据库中检索的数据会更少,因此可能会更快。

以上是关于Url.Action 如何工作 Asp.net MVC?的主要内容,如果未能解决你的问题,请参考以下文章

无法显示带有 asp.net mvc url.action 链接的引导对话框

ASP.NET MVC Url.Action 和路由名称值

使用 Url.Action (ASP.NET MVC) 将分号附加到 href URL

asp.net Javascript window.location Url.Action 不起作用

ASP.NET Core Url.Action 返回空字符串

通过 Url.Action 将参数发送到 asp.net MVC 中的控制器