如何设置内容类型?

问题描述 投票:0回答:2

我正在尝试更改我的 razor MVC5 视图之一以生成纯文本而不是 html。 我这样写:

@{
    this.Response.ClearContent();
    this.Response.ContentType = "text/plain";
}

在我的 cshtml 文件中,但它仍然生成 html。 我也尝试在控制器中设置它:

[AcceptVerbs("GET", "POST", "PUT", "DELETE")]
public ActionResult Version()
{
    Response.ContentType = "text/plain";
    ViewData["ver"] = "v1.1";
    return View();
}

还是不行。

有什么想法吗?

c# asp.net-mvc razor
2个回答
3
投票

您需要将视图渲染为字符串并从操作方法向其发送字符串。 以下是如何将视图渲染为字符串(取自这个答案):

public string RenderRazorViewToString(string viewName, object model)
{
    ViewData.Model = model;
    using (var sw = new StringWriter())
    {
        var viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName);
        var viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw);
        viewResult.View.Render(viewContext, sw);
        return sw.GetStringBuilder().ToString();
    }
}

当您获得渲染的字符串时,只需在操作中执行

return Content(renderedString)
即可:

public ActionResult Version()
{        
    ViewData["ver"] = "v1.1";
    var renderedString = RenderRazorViewToString("Version", null);
    return Content(renderedString);
}

0
投票

如果有人仍在寻找此问题的解决方案,您可以在剃刀视图中使用以下代码。这是一个更好的解决方案。

@{
     Response.ContentType = "text/plain";
}

我正在使用 Html 速记来导出我的枚举,以便在客户端 Java 脚本上可用。剃刀视图看起来像这样。

@{
    Response.ContentType = "application/x-javascript";     
}
@(Html.ExportEnum<ItemStatus>());
@(Html.ExportEnum<ItemAction>());
@(Html.ExportEnum<ItemType>());
© www.soinside.com 2019 - 2024. All rights reserved.