ASP.NET MVC发布日期字段为1/1/0001

时间:2010-04-09 16:57:42

标签: asp.net asp.net-mvc

刚开始使用.NET和MVC(1)。我遇到了一个问题,在我的添加操作中,由于某种原因输入的日期最终为1/1/0001,而不是输入的内容因此导致日期溢出。

在我的模型中,此字段(“已添加”)的类型为datetime,不允许空值。

在我的控制器中我有:

public ActionResult Add()
    {
        Instance instance = new Instance()
        {
            Added = DateTime.Now,
            Active = true
        };

        return View(instance);
    }

    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Add(Instance instance)
    {

        if (ModelState.IsValid)
        {
            try
            {
                System.Diagnostics.Trace.Write("test");
                instanceRepository.Add(instance);
                instanceRepository.Save();

                return RedirectToAction("Details", new { id = instance.InstanceID });
            }
            catch
            {
                ModelState.AddRuleViolations(instance.GetRuleViolations());
            }
        }
        return View(instance);
    }

在我看来,我有:

        <div class="editor-label">
            <%= Html.LabelFor(model => model.Added) %>
        </div>
        <div class="editor-field">
            <%= Html.TextBoxFor(model => model.Added,String.Format("{0:g}",Model.Added))%>
            <%= Html.ValidationMessageFor(model => model.Added) %>

当我第一次进入实例/添加时,默认值设置正确,但是一旦我提交日期变成1/1/0001(根据我的理解,这表明它是null或以无法识别的格式)

当我在Request.Form上调试并查看手表时,我看到编码的日期即Request.Form {已添加= 4%2f9%2f2010 + 8%3a24%3a39 + AM} - 这是一个问题吗?

我知道可能没有足够的信息来判断为什么会失败,但是如果有人可以提供一些关于如何确定提交日期的确定调试技巧,我会非常感激。

3 个答案:

答案 0 :(得分:1)

问题是上面的String.Format("{0:g}", Model.ExpirationDate)位是TextBoxFor方法的TemplateName参数。视图引擎将无法找到与日期匹配的模板。

您需要做的是装饰您的模型

// inside your Instance model
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:g}")]
[DisplayName("Added")]
public DateTime Added { get; set; }

然后在您的视图中使用以下内容

<%= Html.EditorFor(model => model.DateRequired)%>

我从here得到了这个解决方案。

答案 1 :(得分:0)

看起来这是IMO的本地化问题。

请参阅此post

答案 2 :(得分:0)

感谢所有答案......错误结果出现在我的部分模特课程中:

namespace MSSQL_Manager.Models
{
[Bind(Include="xxxxxx,xxxxx,xxxx,xxxx")]
public partial class Instance
{
    public bool IsValid
    {
        get { return (GetRuleViolations().Count() == 0); }
    }

我在[Bind(Include =“xxxx”)]属性中没有'已添加'字段。

需要阅读更多关于属性的内容 - 感谢每个人的时间