带有2个提交按钮/操作的ASP.NETMVC4表单
我在ASP.Net和razor中有一个表单 我需要有两种方式提交上述表单:一种是通过带有2个提交按钮/操作的ASP.NETMVC4表单,asp.net,razor,Asp.net,Razor,我在ASP.Net和razor中有一个表单 我需要有两种方式提交上述表单:一种是通过编辑操作,另一种是通过验证操作 我该怎么做呢 我不介意为此使用JavaScript 编辑: 使用自定义属性,我得到了这个错误 当前对控制器类型“InspecoesController”的操作“Resultados”的请求在以下操作方法之间不明确: System.Web.Mvc.ActionResult Validar(System.Collections.Generic.ICollection1[Waveform
编辑
操作,另一种是通过验证
操作
我该怎么做呢
我不介意为此使用JavaScript
编辑:
使用自定义属性,我得到了这个错误
当前对控制器类型“InspecoesController”的操作“Resultados”的请求在以下操作方法之间不明确:
System.Web.Mvc.ActionResult Validar(System.Collections.Generic.ICollection1[Waveform.IEP.Intus.Server.Web.ViewModels.ResultadoViewModel]),位于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上
您可以使用jquery来实现这一点,只需将两种方法提交到不同的URL,例如,使用以下表单:
<form id="myForm">
<%-- form data inputs here ---%>
<button id="edit">Edit</button>
<button id="validate">Validate</button>
</form>
编辑
验证
您可以使用此脚本(确保它位于视图中,以便使用Url.Action属性):
$(“#编辑”)。单击(函数(){
var form=$(“form#myForm”);
form.attr(“action”)、@Url.action(“Edit”、“MyController”);
表单提交();
});
$(“#验证”)。单击(函数(){
var form=$(“form#myForm”);
form.attr(“action”)、@Url.action(“Validate”、“MyController”);
表单提交();
});
我们的应用程序就是这样的:属性 用它装饰的动作: HTML/Razor
@使用(@Html.BeginForm())
{
}
name
提交按钮的属性应与操作/方法名称匹配
这样,您就不必在javascript中硬编码URL了,这里有一个很好的解释:
两个字:您可以在您的操作中分析已提交按钮的值
或
使用您版本的
操作方法SelectorAttribute(我个人更喜欢并建议您这样做)。如果您使用razor在asp.net中工作,并且希望控制多个提交按钮事件,则此答案将指导您。例如,我们有两个按钮,一个按钮将我们重定向到“PageA.cshtml”,另一个按钮将我们重定向到“PageB.cshtml”
@{
如果(IsPost)
{
如果(请求[“btn”]。等于(“按钮A”))
{
重定向(“PageA.cshtml”);
}
如果(请求[“btn”].等于(“按钮B”))
{
重定向(“PageB.cshtml”);
}
}
}
;
;
对于HTML5,您可以使用:
提交
验证
我们可以通过两种方式实现
在同一视图中有2个表单提交,在控制器中有2个操作方法,但您需要有所需的字段与要放置在其中的表单一起提交
ex在这里与代码一起给出
或
有2个或多个提交按钮,如btnSubmit1和btnSubmit2,并检查使用代码单击哪个按钮的操作方法
if (Request.Form["btnSubmit1"] != null)
{
//
}
if (Request.Form["btnSubmit2"] != null)
{
//
}
我不知道form.attr()
。这应该能奏效。谢谢。使用javascript/jquery,您可以使用attr()
操作任何dom属性,尤其是元素属性。如果您不确定是否有一种方法需要使用jquery文档()-这有很多知识..您应该使用#edit
语法而不是按钮#edit
,假设您在不同的元素类型之间没有重复的ID(这是我能看到使用的唯一原因)。按ID查询要快得多。如果您在RHS上使用非ID选择器,您的情况会好一点,因为它会缩小列表。但是,由于普通ID选择器使用DOM.getElementById(“”)
(至少,不必首先查找所有按钮
元素),它会更快。@JoeBrockhaus-这与此问题无关,但这是一个好问题,因此我更正了我的答案。同意,无关:)很高兴我能提供帮助!我的答案是:完美!使用JQuery/Javascript顺便说一句,在视图中使用非常快速和简单的实现,而不是混乱的代码,对于自定义ActionMethodSelectorAttribute方法,这个类放在哪里?是否需要以某种方式将其注册到框架中?是否为表单设置了action
属性值<代码>@使用(Html.BeginForm())
就足够了。这很奇怪,因为在写这篇评论的时候,我实现了完全相同的东西,而且效果很好。我已经将我的重命名为ButtonNameActionAttribute:这样控制器看起来更干净,触感更明显。这在紧要关头很容易,但当同一控制器中有其他操作方法时,会导致许多其他问题。更不用说视图和控制器之间的隐式契约(大禁忌)。我选择了一个轻量级的JS函数,在提交之前更改表单操作,比如@ŁukaszW.pl belowI,就像这种方法一样。如果您想添加HTML属性,例如用于引导,同时保持无参数的HTML.BeginForm()
的默认行为,您可以将null传递给action和controller。下面是一个例子:Html.BeginForm(null,null,FormMethod.Post,new{@class=“form horizontal”,role=“form”})
@Ramunas,正如人们在上面告诉你的,这是一个很好的解决方案!不是说它有效,但它也是一种聪明的方法,我非常喜欢它。真不敢相信你得到了a-1,这也发生在我身上,每个人都知道,然后-可能有一些帽子在上面。投票支持我!:-)有关MVC6,请参见
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)
{
// ...
}
@using (@Html.BeginForm())
{
<!-- form content here -->
<input type="submit" name="Save" value="Save" />
<input type="submit" name="Publish" value="Publish" />
}
@{
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>
<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>
if (Request.Form["btnSubmit1"] != null)
{
//
}
if (Request.Form["btnSubmit2"] != null)
{
//
}