Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/189.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
Model view controller MVC CRUD应用程序无法从详细信息页面调用Post方法_Model View Controller_Http Post_Crud - Fatal编程技术网

Model view controller MVC CRUD应用程序无法从详细信息页面调用Post方法

Model view controller MVC CRUD应用程序无法从详细信息页面调用Post方法,model-view-controller,http-post,crud,Model View Controller,Http Post,Crud,我有一个基本的MVC CRUD应用程序,我在其中设置了使用基本创建/编辑/删除模板的视图。我正在尝试向细节页面添加一些JS,这需要操作一些按钮和功能。但是,我无法从“详细信息”页面获取我的按钮,以便将数据发布到数据库并返回到索引页面。我在控制器中编写了一个名为“Approve”的自定义方法,但调用它时遇到了一些问题。我有我认为是我的控制器和下面的视图的相对部分。我认为调用HttpPost Edit或Approve方法是可行的,但它似乎不想在单击时偏离详细信息链接。是否有人能够提供调用这两种方法中

我有一个基本的MVC CRUD应用程序,我在其中设置了使用基本创建/编辑/删除模板的视图。我正在尝试向细节页面添加一些JS,这需要操作一些按钮和功能。但是,我无法从“详细信息”页面获取我的按钮,以便将数据发布到数据库并返回到索引页面。我在控制器中编写了一个名为“Approve”的自定义方法,但调用它时遇到了一些问题。我有我认为是我的控制器和下面的视图的相对部分。我认为调用HttpPost Edit或Approve方法是可行的,但它似乎不想在单击时偏离详细信息链接。是否有人能够提供调用这两种方法中任何一种的最佳方式,从而将结果发布到DB并返回到索引。我在下面的几个不同的按钮中输入了我正在取得的进展,并注释掉了。非常感谢您的帮助!谢谢大家!

控制器:

        // GET: Person/Details/5
        public ActionResult Details(int? id)
        {
            if (id == null)
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            Person person = db.Person.Find(id);
            if (person == null)
                return HttpNotFound();
            return View(person);
        }

        // GET: Person/Create
        [HttpGet]
        public ActionResult Create()
        {
            return View();
        }

        // POST: Person/Create
        [HttpPost]
        public ActionResult Create(Person person)
        {
            try
            {
                // TODO: Add insert logic here
                if (ModelState.IsValid)
                {
                    db.Person.Add(person);
                    db.SaveChanges();
                    return RedirectToAction("Index");
                }
                return View(person);
            }
            catch
            {
                return View();
            }
        }

        // GET: Person/Edit/5
        public ActionResult Edit(int? id)
        {
            if (id == null)
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            Person person = db.Person.Find(id);
            if (person == null)
                return HttpNotFound();
            return View(person);
        }

        // POST: Person/Edit/5
        [HttpPost]
        public ActionResult Edit(Person person)
        {
            try
            {
                // TODO: Add update logic here
                if (ModelState.IsValid)
                {
                    db.Entry(person).State = System.Data.Entity.EntityState.Modified;
                    db.SaveChanges();
                    return RedirectToAction("Index");
                }
                return View(person);
            }
            catch
            {
                return View();
            }
        }

        // GET: Person/Delete/5
        public ActionResult Delete(int? id)
        {
            if (id == null)
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            Person person = db.Person.Find(id);
            if (person == null)
                return HttpNotFound();
            return View(person);           
        }

        // POST: Person/Delete/5
        [HttpPost]
        public ActionResult Delete(int? id, Person pers)
        {
            try
            {
                Person person = new Models.Person();
                // TODO: Add delete logic here
                if (ModelState.IsValid)
                {
                    if (id == null)
                        return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
                    person = db.Person.Find(id);
                    if (person == null)
                        return HttpNotFound();
                    db.Person.Remove(person);
                    db.SaveChanges();
                    return RedirectToAction("Index");
                }
                return View(person);
            }
            catch
            {
                return View();
            }
        }

        [HttpPost]
        public ActionResult Approve(int? id, Person person)
        {
            try
            {
                // TODO: Add update logic here
                if (ModelState.IsValid)
                {
                    db.Entry(person).State = System.Data.Entity.EntityState.Modified;
                    db.SaveChanges();
                    return RedirectToAction("Index");
                }
                return View(person);
            }
            catch
            {
                return View();
            }
        }
    }

}
视图:

@使用(Html.BeginForm())
{
@Html.AntiForgeryToken()

标题 只读信息字段 @**@ 在此处添加--> @*@ActionLink(“返回列表”、“索引”)*@
您需要有一个表单(带有
action=“@Url.action(“Approve”、“Person”)”
),在该表单中,您将保留要提交的值(Person对象和Id的属性-Approve方法的参数)。然后您使用普通表单提交。因此,我添加了一个如上所示的链接,我可以看到该链接正试图路由到我的批准方法。但是,单击该链接后,我在网页上收到一个404错误。我想知道我的批准方法中是否有内容?我从Http Post Edit复制了该链接,因为功能相同。谢谢响应。链接不同于表单。您需要提交表单,而不是单击链接!
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()

<div class="form-horizontal">
    <hr />
    <h4>Header</h4>

Read Only Informative Fields

<div class="row">
            <div class="form-group form-group col-md-4">
                <div class="col-md-10">
                    @*<input type="submit" value="Approve" onclick="myFunction()" class="btn btn-default" />*@
                    <input type="submit" value="Approve" onclick="location.href='@Url.Action("Person", "Edit")'" class="btn btn-default" />
                    <input type="submit" value="Edit" class="btn btn-default" />
   Added here ----> <a href="@Url.Action("Approve", "Person")">Test</a>
                    @*@Html.ActionLink("Back to List", "Index")*@
                </div>
            </div>
        </div>
    </div>