刚开始使用.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} - 这是一个问题吗?
我知道可能没有足够的信息来判断为什么会失败,但是如果有人可以提供一些关于如何确定提交日期的确定调试技巧,我会非常感激。
答案 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”)]属性中没有'已添加'字段。
需要阅读更多关于属性的内容 - 感谢每个人的时间