FormCollection缺少提交按钮值

时间:2013-11-20 23:35:01

标签: c# asp.net-mvc forms asp.net-mvc-4

此代码在某一点上有效。我不确定是什么打破了它,但基本上在回发我正在寻找FormsCollection中存在提交按钮键。根据存在,我执行不同的操作。处理此问题的自定义属性受到了影响。当我单步执行并查看FormsCollection时,除了提交表单的提交按钮外,我可以看到表单中的所有键/值。

通过Fiddler2查看提交,它甚至看起来像提交按钮被发送到服务器的其余值。如果我放入一个我正在查找的同名隐藏字段(和硬编码值),我可以成功点击“if exists”逻辑分支,因为隐藏字段的值被发送到服务器。

这是我的表格:

@using (Html.BeginForm("Respond", "AccountInvitations", new {id = Model.Invitation.InvitationCode, ReturnUrl = Request.QueryString["ReturnUrl"] ?? string.Empty}, FormMethod.Post, new {@class = "invitation-details-form"}))
{
<div class="modal-body">
    <div class="status-message info">
        <i></i>
        You have been invited to join <strong>@Model.Invitation.AccountName</strong>.
        Create your profile below to join this account.
    </div>

    @Html.AntiForgeryToken()
    @Html.ServerValidationSummary()
    @Html.EditorFor(model => model.InvitationResponse, "InvitationResponseDto", "")

</div>

<div class="modal-footer">
    <div class="button-container clearfix">
        <input type="submit" name="accept" value="Accept Invitation" class="btn btn-secondary" />
        <input type="submit" name="decline" value="Decline Invitation" class="btn btn-link cancel" />
    </div>
</div>
}

当我按任何一个(表单已提交并且编辑器模板中的所有字段都显示,但不提交输入)时,FormsCollection中都不显示“accept”或“reject”。

我不想用javascript设置隐藏字段值来处理这个问题。

2 个答案:

答案 0 :(得分:3)

哇,这是一对长夜的编码。 This post让我得到答案。几周前添加了一个脚本,以防止双击某些表单条目。表单提交后,表单立即禁用输入。一个简单的setTimeout()延迟禁用就可以了。

答案 1 :(得分:0)

或者你可以使用

<div class="modal-footer">
    <div class="button-container clearfix">
        @using (Html.BeginForm("Your_ActionResult", "Your_controller"}, FormMethod.Get/Post))
        {
            @Html.AntiForgeryToken()
            <input type="submit" name="accept" value="Accept Invitation" class="btn btn-secondary" />
        }
        @using (Html.BeginForm("Your_ActionResult", "Your_controller"}, FormMethod.Get/Post))
        {
            @Html.AntiForgeryToken()
            <input type="submit" name="decline" value="Decline Invitation" class="btn btn-link cancel" />
        }
    </div>
</div>

您必须在Controller中指定调用ActionResul方法的提交按钮