在 mvc4 中以_layout显示数据库中的图像
本文关键字:数据库 图像 显示 layout mvc4 中以 | 更新日期: 2023-09-27 17:57:20
嗨,我
_layout
如下,根据我的要求工作,但这里有几件事我被打动了,即我想显示相应的图像,我写如下
@if (Session["UserName"] != null)
{
<div class="logged_in" id="user_navigation" runat="server">
<a title="Your Profile" href="">
<img alt="" src="@Url.Action("GetPhoto", new { photoId = Session["UserName"] })" height="50" width="50" class="photo" />
</a>
</div>
}
但是这并没有按照我的要求显示图像,所以有人可以帮助我我想在用户登录后显示数据库中的图像,我也想在某些控件中显示session
值
这是我的控制器代码
public ActionResult GetPhoto(string photoId)
{
byte[] photo = null;
var v = db.tblUsers.Where(p => p.UserName == photoId).Select(img => img.Photo).FirstOrDefault();
photo = v;
return File(photo, "image/jpeg");
}
您似乎对<img>
语法有问题。它应该是这样的:
<img alt="" src="@Url.Action("GetPhoto","User", new { photoId = Session["UserName"].ToString() })" height="50" width="50" class="photo" />
根据注释部分,您似乎在实际代码中使用了WebForms视图引擎(<%= Html.Encode(Session["UserName"]) %>
)。
话虽如此,您对此代码有一个更严重的问题。当前经过身份验证的用户不应作为参数传递。这是一个巨大的安全漏洞。所以从摆脱它开始:
<img alt="" src="@Url.Action("GetPhoto", "User")" height="50" width="50" class="photo" />
然后在控制器操作中,您可以检索它:
public ActionResult GetPhoto()
{
string user = Session["UserName"] as string;
byte[] photo = db
.tblUsers
.Where(p => p.UserName == user)
.Select(img => img.Photo)
.FirstOrDefault();
return File(photo, "image/jpeg");
}