Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 创建视图正在重定向到自身_C#_Asp.net Mvc_Asp.net Mvc 4 - Fatal编程技术网

C# 创建视图正在重定向到自身

C# 创建视图正在重定向到自身,c#,asp.net-mvc,asp.net-mvc-4,C#,Asp.net Mvc,Asp.net Mvc 4,我一直在尝试自动增加我的ID(BookId)。所有视图都正常工作(编辑、删除、详细信息、索引),但创建视图工作得不太好,因为每次我尝试添加新书时,它都会重定向到自身 在我的控制器中,我有以下功能: public ActionResult Create() { return View(); } // // POST: /Book/Create [HttpPost] public ActionResult Create(tbBooks tbbooks) { if (ModelSt

我一直在尝试自动增加我的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>
使用(Html.BeginForm(“创建”、“书籍”)){ @Html.ValidationSummary(true) tbBooks @Html.HiddenFor(model=>model.BookId) @Html.HiddenFor(model=>model.BookId)

} @ActionLink(“返回列表”、“索引”) 我已经用表创建了数据库,列“BookId”设置为Identity Specification=Yes。

你能给我的任何帮助我都会很感激,
问候。

这里发生了很多事情:

首先,最好在Create方法中指定它是否是
[HttpGet]
(在第一个方法中)

第二,你的观点是:

@Html.HiddenFor(model => model.BookId)
一旦您没有从[HttpGet]方法向视图传递任何值,这就没有任何意义

第三,通常不会为隐藏字段放置标签。通常不希望显示隐藏字段

此外,对于数据库中的结构,您可能需要在视图中填写字段名称、价格等。若您的ID是自动递增的,那个么您可能不需要自己处理它,数据库将为您处理它

最后,当您提交表单时,可能发生的情况是下面的if命令为false(您可以放置断点并进行检查):

因此,执行的下一个命令是:

return View(tbbooks);

这会使您返回到视图本身。我很惊讶你没有收到任何错误。我建议您查看一些教程,实际使用Visual Studio构建的代码,其中已经包含了一些关于如何工作的重要指标。

您的
ModelState.IsValid
属性返回false,因此它正在执行
返回视图(tbbooks)行。这意味着您的表单没有提供所有必需的值/根据数据注释定义,某些值是不可接受的

在你看来,要知道哪些验证失败了

@Html.ValidationSummary(true)
更改为
@Html.ValidationSummary()

然后再次提交添加表单。您将看到验证错误

传递给
ValidationSummary
的布尔参数告诉系统排除属性错误。这就是为什么你看不到他们

public static MvcHtmlString ValidationSummary(
    this HtmlHelper htmlHelper,
    bool excludePropertyErrors
)
public static MvcHtmlString ValidationSummary(
    this HtmlHelper htmlHelper,
    bool excludePropertyErrors
)