我一直在尝试自动增加我的ID(BookId)。所有视图都在工作(编辑,删除,详细信息,索引),但创建一个视图效果不佳,因为每次我尝试添加新书时它都会重定向到自身。
在我的控制器中,我有以下内容:
public ActionResult Create()
{
return View();
}
//
// POST: /Book/Create
[HttpPost]
public ActionResult Create(tbBooks tbbooks)
{
if (ModelState.IsValid)
{
db.tbBooks.Add(tbbooks);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(tbbooks);
}
在Create.cshtml中:
@using (Html.BeginForm("Create","Book")){
@Html.ValidationSummary(true)
<fieldset>
<legend>tbBooks</legend>
<div class="editor-label">
@Html.HiddenFor(model => model.BookId)
</div>
<div class="editor-field">
@Html.HiddenFor(model => model.BookId)
</div>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>
我已经使用表创建了数据库,并且使用Identity Specification = Yes设置了“BookId”列。 enter image description here
你可以给我任何帮助我会很感激, 问候。
答案 0 :(得分:0)
嗯,这里有很多事情要发生:
首先,如果它是[HttpGet]
(在第一种方法中),您最好在Create方法中指定。
其次,您的观点有:
@Html.HiddenFor(model => model.BookId)
一旦你没有将[HttpGet]方法中的任何值传递给你的观点,这没有任何意义。
第三,不常为隐藏字段放置标签。您通常不想显示隐藏的字段。
此外,对于数据库中的结构,您可能需要在视图中填写字段名称,价格等。如果您的ID自动递增,您可能不需要自己处理,数据库会为您执行此操作。
最后,当您提交表单时,可能发生的情况是下面的if命令为false(您可以放置断点并检查):
if (ModelState.IsValid)
所以执行的下一个命令是:
return View(tbbooks);
这使您返回到View本身。我很惊讶你没有收到任何错误。我建议你看一些教程并实际使用Visual Studio脚手架代码,它已经包含了一些关于工作原理的很好的指标。
答案 1 :(得分:0)
您的ModelState.IsValid
属性返回false,因此它正在执行Return View(tbbooks) line
。这意味着您的表单未提供所有必需的值/根据数据注释定义,某些值是不可接受的。
要知道哪些戒律失败,请在剃须刀视图中
将@Html.ValidationSummary(true)
更改为@Html.ValidationSummary()
再次提交添加表单。您将看到验证错误
传递给ValidationSummary
overload的布尔参数告诉系统排除属性错误。这就是为什么你看不到它们。
public static MvcHtmlString ValidationSummary(
this HtmlHelper htmlHelper,
bool excludePropertyErrors
)