Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# DateTime编辑器模板未以正确格式呈现日期_C#_Jquery_Asp.net Mvc 3_Spark View Engine - Fatal编程技术网

C# 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

我有一个带有datetime输入的页面,还有常用的JQuery datepicker,还有一个“Date”编辑器模板,用于格式化文本框中的日期以及传递到视图中的日期,并添加所需的类别等

当我从默认操作调用该页面时(将日期传递到该页面需要一个可为空的datetime),我会得到一个填充的日期,并且它的格式正确(在本例中为
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