0

我在 .Net 平台上使用 MVC 4,并且在我看来有以下 html。如您所见,名称相同,以区分进入控制器时按下哪个按钮以采取正确的操作。

<tr>
    <td>
        <input type="submit" name="submitbutton" id="btnRefresh" value='Refresh' />
    </td>
        @if (Model.ShowGeneratePDFBtn == true)
        {
            <td>
                <input type="submit" name="submitbutton" id="btnGeneratePDF" value='Generate PDF' />
            </td>
        }
</tr>

但是,当按下第二个(“生成 PDF”)按钮时,我需要禁用它,以便用户在进程发生时无法再次按下它。如果我禁用它,它将不再作为控件出现在 html 中(这是可以理解的)。

这是js:

$('#btnGeneratePDF').click(function () {
    DisableGeneratePDF();
});

function DisableGeneratePDF() {
    $('#btnGeneratePDF').attr("disabled", true);
}

在控制器中,按下时按钮的值为 null 而不是“生成 PDF”,因此不会执行正确的操作。

这是控制器中的第一行:

[HttpPost]
public ActionResult ProcessForm(string submitbutton, ViewModelTemplate_Guarantors model, FormCollection collection)

这是视图中的第一行。我也尝试过使用 FormMethod.Post,但由于我不会转到另一个页面,因此 AjaxOption 会更有效。

@using (Html.BeginForm("ProcessForm", "Home", new AjaxOptions { HttpMethod = "POST" }))

当我禁用按钮时,如何成功地将“生成 PDF”值传递给控制器​​?

4

1 回答 1

1

创建一个隐藏的表单值并将其放入您的视图模型中。然后在单击事件处理程序中设置该值。

在您的模型中,添加以下内容

public class Guarantors
{
    public bool ShouldGeneratePdf { get; set; }
}

在您的视图中,添加

@Html.HiddenFor(x => x.ShouldGeneratePdf)

到你的 JavaScript

$('#btnGeneratePDF').click(function () {
    DisableGeneratePDF();
    $('#ShouldGeneratePdf').val('True');
});

function DisableGeneratePDF() {        
    $('#btnGeneratePDF').attr("disabled", true);
}

那应该这样做。

于 2012-11-07T16:19:42.143 回答