HtmlHelper.ViewContext.Writer的HtmlTextWriter包装程序的日期格式错误



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

如果我尝试在MVC中使用HtmlHelper我得到以下

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

这是使用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时,不可能用当前线程的区域性覆盖区域性。

一种可能的解决方案是只使用普通的TextWriter,它默认为当前线程的区域性。

相关内容

  • 没有找到相关文章

最新更新