C# TextBoxforHelper在日期中混合了日期和月份 请考虑下面的例子:

C# TextBoxforHelper在日期中混合了日期和月份 请考虑下面的例子:,c#,asp.net-mvc-3,C#,Asp.net Mvc 3,视图模型 public class FooViewModel { public DateTime Date { get; set; } } 控制器 public class HomeController : Controller { [HttpGet] public ActionResult Index(FooViewModel foo) { return View(foo); } [HttpPost] public A

视图模型

public class FooViewModel
{
    public DateTime Date { get; set; }
}
  • 控制器

    public class HomeController : Controller
    {
        [HttpGet]
        public ActionResult Index(FooViewModel foo)
        {
            return View(foo);
        }
        [HttpPost]
        public ActionResult Submit(FooViewModel foo)
        {
            return RedirectToAction("Index", foo);
        }
    }
    
  • 看法

    @model MvcApplication1.Models.FooViewModel
    <h1>@Model.Date</h1>
    @using (Html.BeginForm("Submit", "Home", FormMethod.Post))
    {
        @Html.TextBoxFor(m => m.Date)
        <input type="submit" value"Submit" />
    }
    
  • 问题在于,表单提交后,日期编辑器将获得日期和月份切换的值:

  • 我该怎么做才能使它正常工作?


    实际上,我试图格式化编辑器的值:

  • @Html.TextBoxFor(m=>m.Date,新的{value=Model.Date.ToString(“dd.MM.yyyy”)}
  • 使用编辑器模板,如中所示,当然只适用于MVC3;我还使用了
    EditorFor
    helper来替代模板
  • 使用
    DataAnnotations
    [DisplayFormat(ApplyFormatInEditMode=true,DataFormatString=“{0:MMM/dd/yyyy}”)]
  • 这些都没有改变什么。编辑器的值没有更改,也没有格式化


    最后,我(遵循)设法只使用原始HTML,也就是说,
    DateTime
    没有助手方法:

    public static MvcHtmlString GetDateEditor(this FooViewModel model)
    {
        string temp = "<input id=\"Date\" type=\"text\" value=\"{0}\" name=\"Date\" 
                        data-val-required=\"Please, enter a valid date\" 
                        data-val=\"true\" />";
        return MvcHtmlString.Create(
                     string.Format(temp, 
                                   model == null 
                                        ? string.Empty 
                                        : model.Date.ToString("dd.MM.yyyy")));
        }
    
    公共静态MvcHtmlString GetDateEditor(此FooViewModel模型)
    {
    字符串temp=“”;
    返回MvcHtmlString.Create(
    字符串格式(临时,
    模型==null
    ?字符串。空
    :model.Date.ToString(“dd.MM.yyyy”);
    }
    

    如果有一种方法可以实现与任何帮助器方法相同的结果,这对我来说仍然是一个秘密…

    请尝试稍微更改的版本:

    @Html.TextBoxFor(m=>m.Date,new{@Value=Model.Date.ToString(“dd.MM.yyyy”)}

    如果设置日期格式怎么办?@HanletEscaño我确实需要在编辑器中设置日期格式,这也确实应该解决问题。但是,我还是没能格式化它……我会在一段时间内描述我在这个问题上的尝试,我猜数据库中的日期格式是不同的,这就是为什么它会导致问题的原因。你可以将日期格式应用到你的ViewModel(如果你使用它们绑定到视图?@dakait抱歉,你在说什么数据库?这个例子根本没有数据库。@KonstantinVasilcov,你不能在你的模型中定义格式吗,就像在问题中一样,我完全确定我在开始时用大写字母
    V
    @
    尝试了这个方法,但它不起作用。我错了。。。
    public static MvcHtmlString GetDateEditor(this FooViewModel model)
    {
        string temp = "<input id=\"Date\" type=\"text\" value=\"{0}\" name=\"Date\" 
                        data-val-required=\"Please, enter a valid date\" 
                        data-val=\"true\" />";
        return MvcHtmlString.Create(
                     string.Format(temp, 
                                   model == null 
                                        ? string.Empty 
                                        : model.Date.ToString("dd.MM.yyyy")));
        }