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