我是mvc的新手,正在尝试弄清楚如何在索引视图上创建批准按钮。需要澄清。
这里已经有一个关于在mvc视图中创建批准/取消批准按钮的问题。但是,在对其进行审核之后,似乎缺少信息。控制器期望将SubmitButton
和ID传递给它。这我明白。但是视图的“提交”按钮仅发送SubmitButton
,但没有ID。有人可以消除雾气吗?谢谢。
[ActionName("Index")]
[HttpPost]
public ActionResult IndexPost(string SubmitButton, int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
string buttonClicked = SubmitButton;
if(buttonClicked == "Approve")
{
CurrentApplication currentApplication = db.CurrentApplications.Find(id);
currentApplication.AppStatus = "APPROVED";
db.SaveChanges();
}
else if(buttonClicked == "Unapprove")
{
CurrentApplication currentApplication = db.CurrentApplications.Find(id);
currentApplication.AppStatus = "UNAPPROVED";
db.SaveChanges();
}
//Save Record and Redirect
return RedirectToAction("Index");
}
<button type="submit" name="SubmitButton" value="Approve" class="btn btn-sm btn-success">Approve</button>
<button type="submit" name="SubmitButton" value="Unapprove" class="btn btn-sm btn-danger">Unapprove</button>
控制器将使用状态更改来更新数据库,并返回索引以反映更改。
答案 0 :(得分:0)
我想您在使用HTML帮助程序制作的View中有一个HTML表单。就您而言,以下示例代码可能是最简单的示例。
<h2>Welcome to ASP.NET MVC!</h2>
<!--
If needed, check BeginForm parameters to send POST
into right controller and action.
-->
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<!-- second parameter is the value for id field. -->
@Html.Hidden("id", 2001)
<button type="submit" name="SubmitButton" value="Approve" class="btn btn-sm btn-success">Approve</button>
<button type="submit" name="SubmitButton" value="Unapprove" class="btn btn-sm btn-danger">Unapprove</button>
}
using System.Net;
using System.Web.Mvc;
namespace FormTest.Controllers
{
public class HomeController : Controller
{
// GET action for index
public ActionResult Index()
{
// Do something here ...
return View();
}
// POST action for index.
// Will use same path as GET
[HttpPost]
[ActionName("Index")]
public ActionResult IndexPost(string SubmitButton, int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
if (SubmitButton == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
//Redirect to GET Index
return RedirectToAction("Index");
}
}
}
重要的部分是“隐藏”帮助程序,它将生成一个隐藏的输入字段。如果您需要在用例中进行更多修改,请read more here about parameters and examples。
答案 1 :(得分:0)
@ T.Nylund,您的想法是?谢谢。
@model Enumerable<MySQL_MACAddress.Models.macaddress>
@{ ViewBag.Title = "Index"; }
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<table class="table">
<tr>
<th>
@Html.DisplayNameFor(model => model.Status)
</th>
</tr>
@foreach (var item in Model)
{
<tr>
<td>
@HtmlHidden("id", item.idMACAddress)
</td>
<td>
@Html.DisplayFor(modelitem => item.Status)
</td>
<button type="submit" name="SubmitButton" value="Approve" class="btn btn-sm btn-success">Approve</button>
<button type="submit" name="SubmitButton" value="Unapprove" class="btn btn-sm btn-danger">Unapprove</button>
}
答案 2 :(得分:0)
在批准(按钮批准,按钮拒绝)时,我们对不同的操作使用不同的控制器方法
我们的观点:
if (!Model.IsApproved)
{
<td>
@using (Html.BeginForm("Approve", "BudgetItem", new { id = Model.BudgetItemSid, role = Model.ActiveRole }, FormMethod.Post))
{<button type="submit" id="btnApprove" style="display: none;">Approve</button>}
</td>
}
if (!Model.IsRejected)
{
<td>
@using (Html.BeginForm("Reject", "BudgetItem", new { id = Model.BudgetItemSid, role = Model.ActiveRole }, FormMethod.Post))
{<button type="submit" id="btnReject" style="display: none;">Reject</button>}
</td>
}
我们的控制人:
[HttpPost]
public ActionResult Approve(int id, EnumRole role)
{
}
[HttpPost]
public ActionResult Reject(int id, EnumRole role)
{
}
答案 3 :(得分:0)
根据您的最新示例,这是我能想到的最佳答案。首先,您的代码示例有一些语法错误,我需要创建自己的 macaddress -class 。我希望它与您相似。
我使用的示例与之前的答案相同。我只修改视图并创建了maccaddress -class。控制器与之前的相同。
这是重要的部分。我认为您只是以怪异的方式格式化了HTML表单和表格。这是视图渲染的屏幕截图。
现在,当用户单击批准或取消批准时,该表单会将maccaddress ID和按钮值发送到控制器IndexPost -action。
在一个视图示例中:
所以现在为什么起作用的是呈现表单的方式。在示例中,现在每个maccaddress行都有一个html表单。单击按钮后,我们确切知道要发送到控制器的值。
@model IEnumerable<MySQL_MACAddress.Models.macaddress>
@{ ViewBag.Title = "Index"; }
<table class="table">
<tr>
<th> MAC Address </th>
<th> Status </th>
<th> Actions </th>
</tr>
@foreach (var item in Model)
{
using (Html.BeginForm())
{
@Html.AntiForgeryToken()
@Html.Hidden("id", item.idMACAddress)
<tr>
<td> @item.idMACAddress </td>
<td> @item.Status </td>
<td>
<button type="submit" name="SubmitButton" value="Approve" class="btn btn-sm btn-success">Approve</button>
<button type="submit" name="SubmitButton" value="Unapprove" class="btn btn-sm btn-danger">Unapprove</button>
</td>
</tr>
}
}
</table>
检查此示例。不要仅仅复制它,因为它可能无法与您的代码一起使用。视图在这里是更重要的部分,所以请仔细看。
using System;
namespace MySQL_MACAddress.Models
{
public class macaddress
{
public macaddress()
{
}
public string Status { get; set; }
public int idMACAddress { get; set; }
}
}
检查先前的答案。