在Action中返回字符串值,将其放入img标记的Src中

时间:2012-11-17 13:06:11

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

这是我的观点:

<img src="@{Html.RenderAction("GetUserProfileImage", "Home", new { area = "" });}" alt="" />

和我的控制器:

    public ActionResult GetUserProfileImage() {

        string defaultresult = "http://MyProject.dev/Content/img/sample_user.png";
        if (Member.LogIn()) {

            DBFile file = GetMemberPicFromDB();
            return File(file.Content, file.ContentType);

        } else {
            return Content(defaultresult);
        }
    }

所以当我从DB获取文件时,每件事情都没问题,但是当我返回URL(return Content)时,渲染的html会有一些不好的结果,如下所示:

<imghttp: myproject.dev="" content="" img="" sample_user.png="" src="" alt="">

    <div>
        some content from outside of img tag added here
    </div>
</imghttp:>

此外,我将视图更改为:

<img src="http://myproject.dev/Content/img/sample_user.png" alt="" />

一切都很好,

问题出在哪里?似乎返回Content无法将简单字符串返回到src属性,那么你对返回简单字符串的建议是什么?

如果不可能

我认为通过URL(http://myproject.dev/Content/img/sample_user.png)和return File()获取文件时从DB返回,但是如何通过此URl(http://myproject.dev/Content/img/sample_user.png)获取控制器中的文件?< / p>

以及任何其他建议,如果你有?

1 个答案:

答案 0 :(得分:1)

您应该在两种情况下都从控制器操作返回一个文件,并在您的图像中引用此操作,如下所示:

<img src="@Url.Action("GetUserProfileImage", "Home", new { area = "" })" alt="" />

然后在您的控制器操作中返回两种情况下的文件结果:

public ActionResult GetUserProfileImage() 
{
    if (Member.LogIn()) 
    {
        DBFile file = GetMemberPicFromDB();
        return File(file.Content, file.ContentType);
    }
    else 
    {
        string image = Server.MapPath("~/content/img/sample_user.png");
        return File(image, "image/png");
    }
}