C# DateTime编辑器模板未以正确格式呈现日期
我有一个带有datetime输入的页面,还有常用的JQuery datepicker,还有一个“Date”编辑器模板,用于格式化文本框中的日期以及传递到视图中的日期,并添加所需的类别等 当我从默认操作调用该页面时(将日期传递到该页面需要一个可为空的datetime),我会得到一个填充的日期,并且它的格式正确(在本例中为C# DateTime编辑器模板未以正确格式呈现日期,c#,jquery,asp.net-mvc-3,spark-view-engine,C#,Jquery,Asp.net Mvc 3,Spark View Engine,我有一个带有datetime输入的页面,还有常用的JQuery datepicker,还有一个“Date”编辑器模板,用于格式化文本框中的日期以及传递到视图中的日期,并添加所需的类别等 当我从默认操作调用该页面时(将日期传递到该页面需要一个可为空的datetime),我会得到一个填充的日期,并且它的格式正确(在本例中为dd/mm/yyyy)。当我使用datetime调用页面时,它会在操作中正确构建日期,但页面将日期呈现为“mm/dd/yyy hh:mm:ss”,而不是所需的格式。我调用操作的ur
dd/mm/yyyy
)。当我使用datetime调用页面时,它会在操作中正确构建日期,但页面将日期呈现为“mm/dd/yyy hh:mm:ss”
,而不是所需的格式。我调用操作的url是?reportDate=06%2F13%2F2012%2000%3A00%3A00
,它是从html助手操作链接呈现的,将模型日期作为参数传入,操作可以将其转换为正确的日期。如果我尝试调用带有?reportDate=13%2F06%2F2012
(我希望将日期显示为的格式)的页面,则操作会将其作为传递的空参数,页面会正确显示日期,但会引发验证异常-值“13/06/2012”无效。
我在英国,我在web.config中将我的全球化设置为en GB
,但出于某种原因,它通过外观验证了日期的美国版本
型号:
public class ReportModel
{
[Required]
DataType(DataType.Date)]
public DateTime ReportDate { get; set; }
public string Message { get; set; }
//More code here
}
模板(在Shared\EditorTemplates\Date.spark中并使用SparkViewEngine):
如果我需要提供更多的细节,请让我知道
非常感谢您的帮助。默认的模型绑定器在分析GET请求时使用不变量区域性,在分析POST请求时使用线程区域性。这基本上意味着,如果要在GET请求中传递
reportDate
操作参数(作为查询字符串参数),则必须使用不变量区域性对其进行格式化。理想情况下使用:
some_url?reportDate=yyyy-MM-dd
如果您发送POST请求(即提交包含输入字段的表单),则日期必须根据您的应用程序区域性进行格式化,因为这是model binder将使用的内容
签出说明了这一点。非常感谢,这解释了为什么要重新设置格式,如果我以上述格式发送日期,它不会引发验证异常,并且会在操作中捕获日期。但是,在文本框中显示日期时,它仍然没有使用模板中的格式-它将显示yyyy-MM-dd,而不是使用模板中指定的dd/MM/yyyy格式。既然操作捕获了日期并正确地为其分配了模型,为什么在这种情况下不使用模板格式(我使用的是GET not post,正如您假设的那样)?
<p>
<label for="ProcessDate">
Date
<small>
<span class="error">${Html.ValidationMessageFor(m => m.ReportDate)}</span>
</small>
</label>
${Html.EditorFor(m => m.ReportDate, "Date")}
</p>
public ActionResult StatementsReport(DateTime? reportDate)
{
if (!reportDate.HasValue)
reportDate = DateTime.Now;
var report = new ReportModel { ReportDate = reportDate.Value.Date };
return View("Statements/GenerateReport", report);
}
some_url?reportDate=yyyy-MM-dd