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 が、大きな HtmlString を生成する代わりに、VIEW ダイレクトを Response Stream に出力できるかどうかも疑問です。
簡単なテストデータ
これは 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