我在ASP.Net和razor中有一个表单。
我需要提供两种方式来提交所述表单:一种是Edit
行动,另一种是Validate
行动。
我该怎么做呢?
我不介意使用JavaScript。
编辑:
使用自定义属性我收到此错误。
控制器类型'InspecoesController'上的当前操作请求'Resultados'在以下操作方法之间不明确: System.Web.Mvc.ActionResult Validar(System.Collections.Generic.ICollection
1[Waveform.IEP.Intus.Server.Web.ViewModels.ResultadoViewModel]) on type Waveform.IEP.Intus.Server.Web.Controllers.InspecoesController System.Web.Mvc.ActionResult Resultados(System.Collections.Generic.ICollection
1 [Waveform.IEP.Intus.Server.Web.ViewModels.ResultadoViewModel])类型为Waveform.IEP.Intus.Server.Web。 Controllers.InspecoesController
答案 0 :(得分:73)
这就是我们在申请中的含义:
属性
public class HttpParamActionAttribute : ActionNameSelectorAttribute
{
public override bool IsValidName(ControllerContext controllerContext, string actionName, MethodInfo methodInfo)
{
if (actionName.Equals(methodInfo.Name, StringComparison.InvariantCultureIgnoreCase))
return true;
var request = controllerContext.RequestContext.HttpContext.Request;
return request[methodInfo.Name] != null;
}
}
用它装饰的动作:
[HttpParamAction]
public ActionResult Save(MyModel model)
{
// ...
}
[HttpParamAction]
public ActionResult Publish(MyModel model)
{
// ...
}
HTML /剃须刀
@using (@Html.BeginForm())
{
<!-- form content here -->
<input type="submit" name="Save" value="Save" />
<input type="submit" name="Publish" value="Publish" />
}
提交按钮的 name
属性应与操作/方法名称匹配
这样您就不必在javascript中硬编码网址
答案 1 :(得分:44)
你可以用jquery来做,只需要提交两个方法来提交不同的URL,例如使用这种形式:
<form id="myForm">
<%-- form data inputs here ---%>
<button id="edit">Edit</button>
<button id="validate">Validate</button>
</form>
您可以使用此脚本(确保它位于View中,以便使用Url.Action属性):
<script type="text/javascript">
$("#edit").click(function() {
var form = $("form#myForm");
form.attr("action", "@Url.Action("Edit","MyController")");
form.submit();
});
$("#validate").click(function() {
var form = $("form#myForm");
form.attr("action", "@Url.Action("Validate","MyController")");
form.submit();
});
</script>
答案 2 :(得分:8)
如果您使用razor在asp.net中工作,并且您想要控制多个提交按钮事件。那么这个答案将指导您。比如我们有两个按钮,一个按钮会将我们重定向到“PageA.cshtml”,其他按钮会将我们重定向到“PageB.cshtml”。
@{
if (IsPost)
{
if(Request["btn"].Equals("button_A"))
{
Response.Redirect("PageA.cshtml");
}
if(Request["btn"].Equals("button_B"))
{
Response.Redirect("PageB.cshtml");
}
}
}
<form method="post">
<input type="submit" value="button_A" name="btn"/>;
<input type="submit" value="button_B" name="btn"/>;
</form>
答案 3 :(得分:5)
这是一个很好的eplanation: ASP.NET MVC – Multiple buttons in the same form
用2个词:
你可以在你的行动中分析提交按钮的价值
或
使用您的ActionMethodSelectorAttribute
版本(我个人更喜欢并建议)进行单独操作。
答案 4 :(得分:3)
<input type="submit" value="Create" name="button"/>
<input type="submit" value="Reset" name="button" />
&#13;
在Controler中编写以下代码。
[HttpPost]
public ActionResult Login(string button)
{
switch (button)
{
case "Create":
return RedirectToAction("Deshboard", "Home");
break;
case "Reset":
return RedirectToAction("Login", "Home");
break;
}
return View();
}
答案 5 :(得分:3)
With HTML5 you can use button[formaction]
:
<form action="Edit">
<button type="submit">Submit</button> <!-- Will post to default action "Edit" -->
<button type="submit" formaction="Validate">Validate</button> <!-- Will override default action and post to "Validate -->
</form>
答案 6 :(得分:1)
我们可以通过两种方式实现这一目标,
要么在同一个视图中有2个表单提交,并且在控制器上有2个Action方法,但是您需要提交必填字段并将表单放在
中ex在这里给出了代码Multiple forms in view asp.net mvc with multiple submit buttons
或强>
有两个或多个提交按钮说btnSubmit1和btnSubmit2并检查Action方法使用代码点击了哪个按钮
if (Request.Form["btnSubmit1"] != null)
{
//
}
if (Request.Form["btnSubmit2"] != null)
{
//
}