我有视图,它有两个按钮,分别是'是'和'否'。 如果我点击“是”重定向一个页面,如果我点击“否”重定向到另一个页面。
这是我的观点。
@using (Html.BeginForm())
{
<table >
<tr>
<td >
Ceremony :
</td>
<td>
Ceremony at @Model.ceremony_date
</td>
</tr>
<tr>
<td >
Name :
</td>
<td >
@Model.first_name @Model.middle_name @Model.last_name
</td>
</tr>
<tr>
<td colspan="2" >
@Html.Partial("_DegreeDetailsByGraduand", @Model.DegreeList)
</td>
</tr>
<tr>
<td colspan="2" >
IS information is correct ?
</tr>
<tr>
<td>
<input type="submit" id="btndegreeconfirmYes" name="btnsearch" class="searchbutton" value="Yes" />
</td> <td>
<input type="submit" id="btndegreeconfirmNo" name="btnsearch" class="searchbutton" value="No" /></td>
</tr>
</table>
}
这是我的控制器
[HttpPost]
public ActionResult CheckData()
{
return RedirectToRoute("detailform");
}
我不知道如何获取控制器中的按钮值。 我怎么能这样做。
答案 0 :(得分:8)
为提交按钮指定名称,然后在控制器方法中检查提交的值:
<% Html.BeginForm("MyAction", "MyController", FormMethod.Post); %>
<input type="submit" name="submitButton" value="Send" />
<input type="submit" name="submitButton" value="Cancel" />
<% Html.EndForm(); %>
public class MyController : Controller {
public ActionResult MyAction(string submitButton) {
switch(submitButton) {
case "Send":
// delegate sending to another controller action
case "Cancel":
// call another action to perform the cancellation
default:
// If they've submitted the form without a submitButton,
// just return the view again.
return(View());
}
}
}
希望这会有所帮助:
答案 1 :(得分:3)
我猜你使用的是MVC + razor引擎。
这样做:
你的2个按钮:
<input type="submit" value="Yes" id="buttonYes"/>
<input type="submit" value="Cancel" id="buttonCancel"/>
你的表格:
@using (Html.BeginForm("Method", "Controller", FormMethod.Post, new { enctype = "multipart/form-data", id = "CreateReportForm" }))
{
…
}
将此javascript添加到您的表单中。使您的操作适应将重定向的控制器上的操作:
<script type="text/javascript">
$(document).ready(function () {
$("#buttonYes").click(function () {
$('form#CreateReportForm').attr({ action: "Controller/Create" });
});
$("#buttonCancel").click(function () {
$('form#CreateReportForm').attr({ action: " Controller /Cancel" });
});
});
</script>
答案 2 :(得分:2)
试试这样:
[HttpPost]
public ActionResult CheckData(string btnSearch)
{
if (btnSearch == "Yes") {
// The Yes submit button was clicked
} else if (btnSearch == "No") {
// The No submit button was clicked
}
return RedirectToRoute("detailform");
}
但通常最好不要对按钮的文本进行测试,而是针对预定义的值进行测试,因为文本可能会更改并且您的控制器操作可能会中断:
<button type="submit" name="btnsearch" value="yes">Yeah</button>
<button type="submit" name="btnsearch" value="no">Nope, I don't want to do this</button>
然后:
[HttpPost]
public ActionResult CheckData(string btnSearch)
{
if (btnSearch == "yes") {
// The Yes submit button was clicked
} else if (btnSearch == "no") {
// The No submit button was clicked
}
return RedirectToRoute("detailform");
}
甚至还有一种更好的方法,您可以根据单击的按钮调度到不同的控制器操作。检查this article
。
您可以拥有一个行为等于Action
的表单:
@using (Html.BeginForm("Action", "Post"))
{
<input type="submit" name="saveDraft" value="Save Draft" />
<input type="submit" name="publish" value="Publish" />
}
然后在相应的控制器中有2个控制器动作:
public class PostController : Controller
{
[HttpParamAction]
[HttpPost]
public ActionResult SaveDraft(...)
{
// ...
}
[HttpParamAction]
[HttpPost]
public ActionResult Publish(...)
{
// ...
}
}
以下是自定义操作名称选择器的定义:
public class HttpParamActionAttribute : ActionNameSelectorAttribute
{
public override bool IsValidName(ControllerContext controllerContext, string actionName, MethodInfo methodInfo)
{
if (actionName.Equals(methodInfo.Name, StringComparison.InvariantCultureIgnoreCase))
{
return true;
}
if (!actionName.Equals("Action", StringComparison.InvariantCultureIgnoreCase))
{
return false;
}
var request = controllerContext.RequestContext.HttpContext.Request;
return request[methodInfo.Name] != null;
}
}
现在,根据单击的提交按钮,将调用正确的控制器操作。
答案 3 :(得分:1)
使用FormValueRequired属性,如下所示:
[HttpPost]
[FormValueRequired("btndegreeconfirmYes")]
public ActionResult CheckData()
{
Response.Write(submit);
return RedirectToRoute("detailform");
}
您需要更改标记,如下所示:
编辑:使用两个嵌套表格
@using (Html.BeginForm())
{
@using (Html.BeginForm())
{
.
.
.
<input type="submit" id="btndegreeconfirmYes" name="btndegreeconfirmYes"class="searchbutton" value="Yes" />
}
<input type="submit" id="btndegreeconfirmNo" name="btndegreeconfirmNo" class="searchbutton" value="No" /></td>
}
通过使用第一个提交按钮执行此提交表单将只发送自己的值,然后您可以在FromValueRquired属性中使用它。
答案 4 :(得分:0)
您可以创建一个处理程序,以便您的控制器可以根据提交元素名称路由您的帖子。
http://stevenbey.com/enable-multiple-submit-buttons-in-aspnet-mvc
例如,控制器可以处理名为“Action_Publish”的submit元素,如下所示:
[HttpPost, FormAction(Prefix = "Action_")]
public ActionResult Publish()
{
//...
}