我的HomeController中有以下代码:
public ActionResult Edit(int id)
{
var ArticleToEdit = (from m in _db.ArticleSet where m.storyId == id select m).First();
return View(ArticleToEdit);
}
[ValidateInput(false)]
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(Article ArticleToEdit)
{
var originalArticle = (from m in _db.ArticleSet where m.storyId == ArticleToEdit.storyId select m).First();
if (!ModelState.IsValid)
return View(originalArticle);
_db.ApplyPropertyChanges(originalArticle.EntityKey.EntitySetName, ArticleToEdit);
_db.SaveChanges();
return RedirectToAction("Index");
}
这是Edit方法的视图:
<% using (Html.BeginForm()) {%>
<fieldset>
<legend>Fields</legend>
<p>
<label for="headline">Headline</label>
<%= Html.TextBox("headline") %>
</p>
<p>
<label for="story">Story <span>( HTML Allowed )</span></label>
<%= Html.TextArea("story") %>
</p>
<p>
<label for="image">Image URL</label>
<%= Html.TextBox("image") %>
</p>
<p>
<input type="submit" value="Post" />
</p>
</fieldset>
<% } %>
当我按下“提交”按钮时,我收到错误消息:{"The conversion of a datetime2 data type to a datetime data type resulted in an out-of-range value.\r\nThe statement has been terminated."}
任何想法是什么问题?我假设edit方法正在尝试将数据库中的过帐值更新为已编辑的值,但是由于某种原因,它并不喜欢它。尽管我不明白为什么要涉及该日期,因为日期未提及控制器方法进行编辑?
问题是您使用ApplyPropertyChanges
的模型对象仅填充了表单(标题,故事和图像)中的数据。ApplyPropertyChanges
将更改应用于对象的所有属性,包括未初始化的对象,该属性DateTime
设置为0001-01-01,超出SQL Server的范围DATETIME
。
建议您不要使用ApplyPropertyChanges
,而是检索要修改的对象,更改表单编辑的特定字段,然后使用这些修改保存对象。这样,仅修改了字段。或者,您可以在页面中放置隐藏的输入,并填充其他字段,但这对并发编辑不是很友好。
更新:
这是一个未经测试的示例,仅更新了对象的某些字段(这是假设您正在使用LINQ to SQL):
var story = _db.ArticleSet.First(a => a.storyId == ArticleToEdit.storyId);
story.headline = ArticleToEdit.headline;
story.story = ArticleToEdit.story;
story.image = ArticleToEdit.image;
story.modifiedDate = DateTime.Now;
_db.SubmitChanges();
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句