Javascript 提交时未发送MVC按钮值
我在一个MVC项目中工作,我有几个按钮,但有一个单独的值,以便控制器知道如何做,如下所示Javascript 提交时未发送MVC按钮值,javascript,asp.net-mvc,Javascript,Asp.net Mvc,我在一个MVC项目中工作,我有几个按钮,但有一个单独的值,以便控制器知道如何做,如下所示 <input type="submit" value="Reject" name="rejectHighlight" class="icon-cancel-1 btn btn-danger" /> <input type="submit" value="Archive" name="archiveHighlight" class="icon-cancel-1 btn btn-danger"
<input type="submit" value="Reject" name="rejectHighlight" class="icon-cancel-1 btn btn-danger" />
<input type="submit" value="Archive" name="archiveHighlight" class="icon-cancel-1 btn btn-danger" />
现在JavaScript代码工作得很好,我不能双击,但是当它被发布到控制器时,我已经丢失了我的按钮值
我没有JavaScript方面的经验,在我的搜索中也找不到解决这个问题的答案。有人能告诉我如何在再次提交时包含这些值的正确方向吗
已更新以显示视图和控制器方法,如下所示
<input type="submit" value="Reject" name="rejectHighlight" class="icon-cancel-1 btn btn-danger" />
<input type="submit" value="Archive" name="archiveHighlight" class="icon-cancel-1 btn btn-danger" />
下面是视图
@model OperationHighlights.Models.Highlight
@{
ViewBag.Title = "Edit Highlight";
}
<h2>Edit Highlight</h2>
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
<hr />
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(model => model.Id)
@if (ViewBag.Message != null)
{
<ul>
<li class="text-success">@Html.Raw(ViewBag.Message)</li>
</ul>
}
<div class="form-group">
@Html.LabelFor(model => model.Title, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.Title, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.Title, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.OrigGroupId, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownList("CurrGroupId", null, htmlAttributes: new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.CurrGroupId, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.ClassificationId, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownList("ClassificationId", null, htmlAttributes: new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.ClassificationId, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.Description, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.TextAreaFor(model => model.Description, 5, 100, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.Description, "", new { @class = "text-danger" })
</div>
</div>
<hr />
@if (ViewBag.SubmitReview == "Review")
{
<div class="form-group">
@Html.LabelFor(model => model.Comments, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.TextAreaFor(model => model.Comments, 5, 100, new { htmlAttributes = new { @class = "form-control" } })
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Save" class="btn btn-default" />
<input type="submit" value="Approve" name="submitHighlight" class="icon-check btn btn-default" />
<input type="submit" value="Reject" name="rejectHighlight" class="icon-cancel-1 btn btn-danger" />
<input type="submit" value="Archive" name="archiveHighlight" class="icon-cancel-1 btn btn-danger" />
</div>
</div>
}
else
{
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Save" class="btn btn-default" />
<input type="submit" value="Submit" name="submitHighlight" class="btn btn-default" />
</div>
</div>
}
</div>
}
一种方法是在提交表单时生成隐藏输入:
$(function () {
// Set up click handlers on each submit button
$("form").find("input[type='submit']").each(function () {
$(this).click(function () {
$(this).closest("form").find("input[type='submit']").removeClass("active");
$(this).addClass("active");
});
});
});
$(document).on('submit', 'form', function (e) {
// Remove any added inputs (if there are any)
$('input[name=acceptReject]').remove();
var buttons = $(this).find('[type="submit"]');
if ($(this).valid()) {
// Add hidden input with name acceptReject and value of button clicked value
$('<input>').attr({
type: 'hidden',
name: 'acceptReject',
value: $(this).find(".active").val()
}).appendTo('form');
buttons.each(function (btn) {
$(buttons[btn]).prop('disabled', true);
});
}
else {
buttons.each(function (btn) {
$(buttons[btn]).prop('disabled', false);
});
}
});
$(函数(){
//在每个提交按钮上设置单击处理程序
$(“表单”).find(“输入[type='submit']”)。每个函数(){
$(此)。单击(函数(){
$(this).closest(“form”).find(“input[type='submit']”)。removeClass(“active”);
$(此).addClass(“活动”);
});
});
});
$(文档).on('submit','form',function(e){
//删除任何添加的输入(如果有)
$('input[name=acceptReject]')。删除();
var buttons=$(this.find('[type=“submit”]');
if($(this).valid()){
//添加名为acceptReject和按钮单击值的隐藏输入
$('').attr({
键入:“隐藏”,
名称:“接受拒绝”,
值:$(this.find(“.active”).val()
}).附录(“形式”);
按钮。每个(功能(btn){
$(按钮[btn]).prop('disabled',true);
});
}
否则{
按钮。每个(功能(btn){
$(按钮[btn]).prop('disabled',false);
});
}
});
这将提交一个名为“acceptReject”的隐藏输入,其值为单击的提交按钮(存档或拒绝)
您必须修改控制器参数和代码,以使用这些值接受string acceptReject
,并从提交按钮中删除参数(和代码)
(如评论中所述,禁用输入不随表格一起提交)您需要发布完整的html格式以及控制器方法。请参阅以下答案:您禁用了按钮,因此它不会按照规范提交其值。@gforce301-但这会将我的右键放回原来的位置,并允许用户双击或三次单击按钮并导致多次提交。如何停止多次点击并将数据传递给控制器。就个人而言,我不会使用“提交”类型的输入按钮。我将使用带有点击处理程序的
按钮元素,并通过Ajax提交表单。这样您就可以控制提交的操作。@gforce301谢谢您提供的信息。目前,我已经通过代码捕获并处理了任何可能的多次点击。我希望我只是错过了一些东西,有一种快速的方法可以在全球范围内捕捉到这一点。我创建了一些故事,以探索在未来版本中更改按钮的选项。
$(function () {
// Set up click handlers on each submit button
$("form").find("input[type='submit']").each(function () {
$(this).click(function () {
$(this).closest("form").find("input[type='submit']").removeClass("active");
$(this).addClass("active");
});
});
});
$(document).on('submit', 'form', function (e) {
// Remove any added inputs (if there are any)
$('input[name=acceptReject]').remove();
var buttons = $(this).find('[type="submit"]');
if ($(this).valid()) {
// Add hidden input with name acceptReject and value of button clicked value
$('<input>').attr({
type: 'hidden',
name: 'acceptReject',
value: $(this).find(".active").val()
}).appendTo('form');
buttons.each(function (btn) {
$(buttons[btn]).prop('disabled', true);
});
}
else {
buttons.each(function (btn) {
$(buttons[btn]).prop('disabled', false);
});
}
});