0

我有一组非常大的控件,它们使用 HtmlTextWriter.WriteLine(format, params object[] args) 在 Response(HtmlTextWriter writer) 方法中生成 Html 内容分配

如果我尝试在带有 HtmlHelper 的 MVC 中使用它,我会得到以下信息

var ts = DateTime.Now;
using (var writer = new HtmlTextWriter(helper.ViewContext.Writer))
{
   writer.WriteLine("ToString(T) = " + ts.ToString("T") + "<br/>");
   writer.WriteLine("string.Format = " + string.Format("{0:T}", ts) + "<br/>");
   writer.WriteLine("WriteLine = {0:T}<br/>", ts);
}

ToString(T) = 9:27:07 AM
string.Format = 9:27:07 AM
WriteLine = 09:27:07 <=== This is in a 24 Hour Format

如果我改用“helper.ViewContext.HttpContext.Response.Output”,则格式正确,但内容输出在视图中的其他所有内容之上。

还想知道 MVC aciont 是否可以将 VIEW 直接输出到响应流而不是生成大的 HtmlStrings

简单的测试数据

这不是 MVC 问题,但可能是 Razor 问题,我可以在一个简单的 cshtml 文件中复制它

@{
    var ts = DateTime.Now.AddHours(24 * 5 - 5);
}
ToString(T) = @ts.ToString("d") @ts.ToString("T") <br />
StringFormat = @string.Format("{0:d} {0:T}", ts) <br />
@using (var writer = new HtmlTextWriter(this.Output))
{
    writer.WriteLine("Output.WriteLine: {0:d} {0:T}<br/>", ts);
}
@using (var writer = new HtmlTextWriter(this.Response.Output))
{
    writer.WriteLine("Respone.Output.WriteLine: {0:d} {0:T}<br/>", ts);
}

RESULTS
Respone.Output.WriteLine: 1/4/2016 8:11:11 AM <== Correct but rendered at the top
ToString(T) = 1/4/2016 8:11:11 AM <== Correct
StringFormat = 1/4/2016 8:11:11 AM <== Correct
Output.WriteLine: 01/04/2016 08:11:11 <== Wrong format, this is 24HR
4

1 回答 1

1

这是使用的直接结果HtmlTextWriter。如果您查看它的源代码,则很难使用InvariantCulture.

public HtmlTextWriter(TextWriter writer) : this(writer, "\t")
{
}

public HtmlTextWriter(TextWriter writer, string tabString) 
    // Hard coded to the invariant culture
    : base(CultureInfo.InvariantCulture)
{
    // More initialization...
}

据我所知,在使用HtmlTextWriter.

一种可能的解决方案是只使用一个 plain TextWriter,它默认为当前线程的文化。

于 2015-12-30T19:49:36.960 回答