编辑v2: - 解决步骤
写了自定义的ModelBinder,现在它可以工作了。另外,我尝试并注意到,如果将布尔值作为字符串(“boolean.toString()”)解析为隐藏输入,它将与Default ModelBinder一起使用。 但是使用Deafault ModelBinder,我不会抓住这个。
编辑v1:
我可能已经开始添加其余字段的隐藏输入。现在它似乎没有正确地将表单值与模型绑定...
根据我对Default Binder的理解,当我得到的所有字段名称与表单输入名称属性相同时(int season ....
我可能需要编写自己的活页夹,但是我非常期待的那种模型优雅会不在话下。
到目前为止,对我来说可能还有更好的解决方案。任何建议和帮助表示赞赏。
ORIGINAL:
有关于创建的问题,并且能够构建我自己的编辑操作,我将仅更改少数属性(在本例中为季节和剧集字段),我希望它能够与模型一起使用,而不是单个字段
我有这个型号......
public class Entry
{
public int entryID { get; set; }
[Required]
[Range(0, 99)]
public int season { get; set; }
[Required]
[Range(0, 99)]
public int episode { get; set; }
[Required]
public Boolean button_dark { get; set; }
[Required]
public int showID { get; set; }
public virtual Show show { get; set; }
public int? pictureID { get; set; }
public virtual Picture picture { get; set; }
public Entry () {
season = 0;
episode = 0;
}
}
...我在控制器中获得了经典的GET和POST动作......
public ActionResult Index(int id)
{
Entry entry = db.Entries.Find(id);
if (entry == null)
{
return HttpNotFound();
}
return View(entry);
}
[HttpPost]
public ActionResult Index(Entry entry)
{
if (ModelState.IsValid)
{
db.Entry(entry).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Home");
}
return View(entry);
}
......在视图中我很重要。
<form action="/Entry/Index/@Model.entryID" method="post">
<input type="number" name="season" value="@Model.season" />
<input type="number" name="episode" value="@Model.episode"/>
<input class="button" type="submit" value="Submit" />
</form>
从我读到的关于Model Binder的内容来看,它只是嚼得好。 (我希望我没有错过解释或误解任何事情) 提交表单时,我在“db.SaveChanges();”中获得此异常。言。
System.Data.Entity.Infrastructure.DbUpdateConcurrencyException未被用户代码处理 的HResult = -2146233087 Message =存储更新,插入或删除语句影响了意外的行数(0)。自实体加载后,实体可能已被修改或删除。刷新ObjectStateManager条目。
我知道它说的是什么,但不知道为什么。作为.NET MVC中的新手,我不了解其他论坛帖子中的异常本身。
是否有人请知道我应该在哪里做什么或者读什么来帮助我?
非常感谢。
答案 0 :(得分:0)
好的,现在我将总结一下,对我来说,对我的问题有点不直观,解决方案......