使用DateTime模板添加搜索表单

时间:2012-07-01 20:27:15

标签: asp.net asp.net-mvc asp.net-mvc-3

在我的EditorTemplates中,我有DateTime.cshtml - 可以在创建/编辑/更新视图中查找:

@model Nullable<System.DateTime> 

@if ( Model.HasValue ) { 
   @Html.TextBox( "" , String.Format( "{0:dd/MM/yyyy}" , Model.Value ) , new  { @class = "datepicker span2" } ) 
} 
else { 
   @Html.TextBox( "" , String.Format( "{0:dd/MM/yyyy}" , DateTime.Now ) , new { @class = "datepicker span2" } ) 
} 

在创建搜索视图时,我还想使用日期时间选择器 - 如果使用上面的代码,当它没有链接到模型,而只是纯HTML时,我将如何编写视图代码?

如果我只是在Razor标记中输入以下内容:

@using (Html.BeginForm())
{
    <p>
        Availability between: @Html.TextBox( "From" , String.Format( "{0:dd/MM/yyyy}") , new  { @class = "datepicker span2" } ) 
                         and: @Html.TextBox( "To" , String.Format( "{0:dd/MM/yyyy}") , new  { @class = "datepicker span2" } )
        <input type="submit" value="Search" /></p>
}

我刚收到错误:

{"Index (zero based) must be greater than or equal to zero and less than the size of the argument list."}

感谢您的帮助,

标记

2 个答案:

答案 0 :(得分:1)

您尚未在DateTime中指定String.Format - 这就是您收到该错误的原因,它需要一个参数,但您还没有提供任何参数。尝试使用DateTime.Now

e.g。

@Html.TextBox( "From" , String.Format( "{0:dd/MM/yyyy}", DateTime.Now ), 
new  { @class = "datepicker span2" } ) 

或者,只需向ViewModel添加两个DateTime属性,并在其上使用EditorFor帮助程序。

答案 1 :(得分:0)

请勿在主视图中使用TextBox。如果您希望自定义编辑器模板呈现,则应使用EditorFor帮助程序:

@using (Html.BeginForm())
{
    <p>
        Availability between: 
        @Html.EditorFor(x => x.From)
        and: 
        @Html.EditorFor(x => x.To)

        <input type="submit" value="Search" />
    </p>
}

如果FromTo属性的类型为DateTime,则ASP.NET MVC将自动呈现您的自定义编辑器模板(~/Views/Shared/EditorTemplates/DateTime.cshtml)。