【问题标题】:TextBoxFor helper mixes day and month in datesTextBoxFor 助手在日期中混合日期和月份
【发布时间】:2013-04-11 06:23:52
【问题描述】:

请考虑以下示例:

  1. 查看模型

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

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

    @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" />
    }
    
  4. 路线

    routes.MapRoute(
        null,
        "",
        new { controller = "Home", action = "Index" }
    );
    routes.MapRoute(
        null,
        "{action}",
        new { controller = "Home" },
        new { action = "Submit" }
    );
    

问题是提交表单后,日期编辑器获取的值是日期和月份切换的:

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


其实我尝试格式化编辑器的值:

  1. @Html.TextBoxFor(m =&gt; m.Date, new { value = Model.Date.ToString("dd.MM.yyyy") })
  2. 使用编辑器模板,如MVC 2 Editor Template with DateTime所示,当然只有MVC3采用;并且我还使用了EditorFor helper 来使模板被使用。
  3. 使用DataAnnotations:[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MMM/dd/yyyy}")]

这些都没有改变任何东西。编辑器的值既没有改变,也没有出现格式化。


最后,我(跟随 the answer by DrJokepu)设法使这项工作仅适用于原始 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")));
    }

如果有一种方法可以使用任何辅助方法达到相同的结果对我来说仍然是一个秘密......

【问题讨论】:

  • 如果你格式化日期呢?
  • @HanletEscaño 我确实需要在编辑器中格式化日期,这确实也应该解决问题。但是,无论如何我都没有格式化它......我会在一段时间内描述我在这个问题中的尝试
  • 我猜数据库中的日期格式不同,这就是导致问题的原因,您可以将日期格式应用于 ViewModel(如果您使用它们绑定到视图?)
  • @dakait 抱歉,您在说什么数据库?这个例子根本没有数据库。
  • @KonstantinVasilcov,你不能在你的模型中定义格式吗,就像问题stackoverflow.com/questions/1961114/date-only-from-textboxfor

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


【解决方案1】:

请尝试稍作改动的版本:
@Html.TextBoxFor(m =&gt; m.Date, new { @Value = Model.Date.ToString("dd.MM.yyyy") })

【讨论】:

  • 我绝对确定我在开头用大写字母V@ 尝试过,但没有成功。我错了……
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多