Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.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
明确指定模型数据类型MVC/C#_C#_Asp.net Mvc_Datetime - Fatal编程技术网

明确指定模型数据类型MVC/C#

明确指定模型数据类型MVC/C#,c#,asp.net-mvc,datetime,C#,Asp.net Mvc,Datetime,因为@Html.EditorFor()正在根据模型数据类型构建输入字段。我想使用这个方法为DATETIME类型的模型变量而不是日历生成一个文本框。有什么方法可以做到这一点吗?您可以创建自己的助手来显示和管理日期 public static MvcHtmlString DatePickerFor<TModel, TProperty> (this HtmlHelper<TModel> helper, Expression<Func<TModel, TProper

因为
@Html.EditorFor()
正在根据模型数据类型构建输入字段。我想使用这个方法为DATETIME类型的模型变量而不是日历生成一个文本框。有什么方法可以做到这一点吗?

您可以创建自己的助手来显示和管理日期

public static MvcHtmlString DatePickerFor<TModel, TProperty>
(this HtmlHelper<TModel> helper, 
Expression<Func<TModel, TProperty>> expression)
{
    string datePickerName = 
          ExpressionHelper.GetExpressionText(expression);
    string datePickerFullName = helper.ViewContext.ViewData.
                   TemplateInfo.GetFullHtmlFieldName
                   (datePickerName);
    string datePickerID = TagBuilder.CreateSanitizedId
                          (datePickerFullName);

    ModelMetadata metadata = ModelMetadata.FromLambdaExpression
                             (expression, helper.ViewData);
    DateTime datePickerValue = (metadata.Model == null ? 
                             DateTime.Now : DateTime.Parse(
                             metadata.Model.ToString()));

    TagBuilder tag = new TagBuilder("input");
    tag.Attributes.Add("name", datePickerFullName);
    tag.Attributes.Add("id", datePickerID);
    tag.Attributes.Add("type", "date");
    tag.Attributes.Add("value", datePickerValue.
                                ToString("yyyy-MM-dd"));

    IDictionary<string, object> validationAttributes = helper.
    GetUnobtrusiveValidationAttributes
    (datePickerFullName, metadata);

    foreach (string key in validationAttributes.Keys)
    {
        tag.Attributes.Add(key, validationAttributes[key].ToString());
    }

    MvcHtmlString html=new MvcHtmlString(
               tag.ToString(TagRenderMode.SelfClosing));
    return html;
}
你可以使用你的助手

<script src="~/Scripts/jquery-1.10.2.js"></script>
<script src="~/Scripts/jquery.validate.js"></script>
<script src="~/Scripts/jquery.validate.unobtrusive.js"></script>
@using(Html.BeginForm("ProcessForm","Home",FormMethod.Post))
    {        
        @Html.DatePicker("birthdateUnbound")
        @Html.DatePickerFor(m=>m.BirthDate)
        @Html.ValidationMessageFor(m=>m.BirthDate)
        <input type="submit" value="Submit" />
    }

TextBoxFor
[DataType(DataType.Text)]
,AFAIK。真正的问题是为什么要像编辑文本一样编辑日期时间。@CodeCaster[DataType(DataType.text)]不起作用,TextBoxFor我知道它会生成一个文本框,但关键是你能不能使用FormEditorFor并为DateTime变量获取一个文本框。@CodeCaster我需要将其解析为DateTime格式的sql。
FormEditorFor()
?这不是MVC的一部分(或者你的意思是
EditorFor()
)@StephenMuecke是的,这就是我的意思,为任何混淆道歉。
<script src="~/Scripts/jquery-1.10.2.js"></script>
<script src="~/Scripts/jquery.validate.js"></script>
<script src="~/Scripts/jquery.validate.unobtrusive.js"></script>
@using(Html.BeginForm("ProcessForm","Home",FormMethod.Post))
    {        
        @Html.DatePicker("birthdateUnbound")
        @Html.DatePickerFor(m=>m.BirthDate)
        @Html.ValidationMessageFor(m=>m.BirthDate)
        <input type="submit" value="Submit" />
    }
public ActionResult ProcessForm(Employee obj)
{
    return View("Index",obj);
}