Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 提交时未发送MVC按钮值_Javascript_Asp.net Mvc - Fatal编程技术网

Javascript 提交时未发送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"

我在一个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" />
现在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);
        });
    }
});