在ASP.NET MVC post上未检测到提交按钮
我正在开发一个ASP.NET MVC表单,它需要多个提交按钮。我读过半打左右关于提交按钮标识的帖子,但我甚至无法检测到表单帖子上的提交按钮。按钮是命名的,所以我希望它们至少会显示在发布的元素中 经过多次尝试和错误,我的表格目前定义如下:在ASP.NET MVC post上未检测到提交按钮,asp.net,asp.net-mvc,forms,Asp.net,Asp.net Mvc,Forms,我正在开发一个ASP.NET MVC表单,它需要多个提交按钮。我读过半打左右关于提交按钮标识的帖子,但我甚至无法检测到表单帖子上的提交按钮。按钮是命名的,所以我希望它们至少会显示在发布的元素中 经过多次尝试和错误,我的表格目前定义如下: @using (Html.BeginForm("LineItems", "Loan", FormMethod.Post, new { @class = "form-horizontal", role = "form" })) { // Several o
@using (Html.BeginForm("LineItems", "Loan", FormMethod.Post, new { @class = "form-horizontal", role = "form" }))
{
// Several omitted fields.
<input type="submit" id="Command" name="Command" value="Save" class="btn btn-primary btn-sm" />
<input type="submit" id="Command" name="Command" value="Confirm Budget" class="btn btn-sm btn-success" />
}
我在ModelState.IsValid行上放置了一个断点,然后开始在调试器中检查。这是我看过的几块手表。
Request.Params.allkey
Request.Form.allkey
提交按钮在这两个窗口中都没有显示。另外,您会注意到我在ActionResult的参数中插入了string命令。它只返回NULL。我已经更改了这些按钮的名称和ID好几次,但仍然找不到它们
在即时窗口中,返回null:Request.Form[“Command”]
这个按钮会出现在表格的哪个位置?如果它不在Request.Form.allkey中,它会在哪里
还有一件事需要提及,这个表单成功地保存了我正在使用的数据。我们刚刚添加了另一个按钮,因为当选择第二个按钮时,我们需要对表单元素执行不同的操作,因此我需要检测submit按钮
虽然我已经处理了很多传统的ASP和Web表单,但我对MVC不太精通。因此,如果这是一个重复的问题,我提前表示歉意
这是我读过的众多帖子中的一些,但我一直无法解决这个问题
public string ButtonSelected { get; set; }
在视图中,我将其放入代码块中以获取字段名
var hiddenButtonSelectedFieldID = Html.IdFor(m => m.ButtonSelected);
下面,我将这个脚本放到视图中
<script>
$(function () {
$('.submissionButton').on('click', function () {
var buttonId = $(this).prop("id");
$('#@hiddenButtonSelectedFieldID').val(buttonId);
});
});
</script>
$(函数(){
$('.submissionButton')。在('click',函数(){
var buttonId=$(this.prop(“id”);
$('#@hiddenButtonSelectedFieldID').val(buttonId);
});
});
我在表单按钮上方添加了这个新的隐藏字段
@Html.HiddenFor(m => m.ButtonSelected, new { @Value = "Save" })
<input type="submit" id="btnSave" name="btnSave" value="Save" class="btn btn-primary btn-sm submissionButton" />
<input type="submit" id="btnConfirmBudget" name="btnConfirm" value="Confirm Budget" class="btn btn-sm btn-success submissionButton" />
@Html.HiddenFor(m=>m.ButtonSelected,new{@Value=“Save”})
发布表单后,将成功返回“我的模型”中的选定按钮。模型的ButtonSelected属性将根据我单击的内容具有“btnSave”或“btnConfirmBudget”。如果我通过Enter键单击,它也可以工作。就我个人而言,我不喜欢这种变通方法。它很脆弱,具有JavaScript依赖性,而且感觉非常粗糙。但我必须实事求是,让这一部分运作起来,继续这个项目
我愿意尝试其他方法,但可能无法立即作出回应。再次感谢你的帮助
==编辑日期:2015年4月29日===
好吧,我不能结束这个问题。在一次重新创建一个表单元素之后,从提交按钮开始,我能够成功地识别所选的提交按钮,直到我添加了一个具有自定义远程验证程序的表单元素。添加该元素后,submitted按钮返回null。如果我在模型中禁用了自定义验证器,我就能够识别按钮。因此,我删除了前面的JavaScript变通代码,并从模型中删除了远程验证器数据注释。之前,我已经编写了代码来验证控制器操作中的表单元素,以及一个额外的回退。所以我只是在运行服务器端验证例程。如果时间允许,我可以将这些发现的细节作为另一个SO问题发布。一定是我忽略了某些东西,或者在使用自定义远程验证器时实现不正确
版主可以随意关闭此页面。谢谢。除了两个元素具有相同的id外,您的代码看起来是合法的。 尝试将视图和操作中的“命令”名称更改为其他名称(“btnName”或其他名称) 尝试将
更改为
,我不确定它们可能会有不同的工作方式
最好还是仔细看看正在发布的内容。您可以使用浏览器中的开发人员工具查看post请求。
如果操作后重定向到某个地方,请记住在浏览器开发人员工具中启用保留请求历史记录
或者您可以使用fiddler跟踪请求
无论如何,它应该给你一个想法。
从我的经验来看,任何时候你发布的东西在绑定后都不会出现在动作参数中,这是因为名称不匹配。检查打字错误。(:为什么不使用收音机而不是两个按钮?您所显示的应该可以正常工作。参数
string命令
应该是“Save”或“Confirm Budget”。参数name
需要相同,但我建议您删除id
属性(重复的id的
无效,而且似乎没有必要拥有它们)它似乎在这种情况下工作得很好:我能想到的唯一原因是你实际上是在使用ajax提交它?也许可以尝试将名称“Command”改成其他名称。它可能是某个地方的保留字,导致它被忽略……也许?
@Html.HiddenFor(m => m.ButtonSelected, new { @Value = "Save" })
<input type="submit" id="btnSave" name="btnSave" value="Save" class="btn btn-primary btn-sm submissionButton" />
<input type="submit" id="btnConfirmBudget" name="btnConfirm" value="Confirm Budget" class="btn btn-sm btn-success submissionButton" />