1

我在 ASP.Net Web 表单中有以下按钮:

<asp:Button id="btn_submit" text="Submit (Click only Once)" OnClick="process_form" runat="server" />

在页面代码中,我有以下用于禁用多次提交的功能(这在 ASP.Net 2.0 下运行良好)......

private sub prevent_multiple_submits()

dim sb as StringBuilder

sb = New StringBuilder()

sb.Append( "this.value = 'Please wait...';this.disabled = true;" )
sb.Append( Page.ClientScript.GetPostBackEventReference( btn_submit, String.Empty ) )

btn_submit.Attributes.Add( "onclick", sb.ToString() )

end sub

当页面在 ASP.Net 2.0 下运行时,呈现的 HTML 如下(工作正常)...

<input type="submit" name="btn_submit" value="Submit (Click only Once)" onclick="this.value = 'Please wait...';this.disabled = true;__doPostBack('btn_submit','');" id="btn_submit" />

当页面在 ASP.Net 4.0 下运行时,呈现的 HTML 如下:

<input type="submit" name="btn_submit" value="Submit (Click only Once)" onclick="this.value = &#39;Please wait...&#39;;this.disabled = true;__doPostBack(&#39;btn_submit&#39;,&#39;&#39;);" language="javascript" id="btn_submit" />

...由于某种原因,该按钮永远不会显示为禁用...(就像在 ASP.Net 2.0 下一样)...

表单仍然提交并且一切正常——但是按钮在被点击后永远不会出现?!

有没有其他人处理过这种行为?..如果是这样,您是否找到了解决方案而无需更改 web.config、使用 JQuery 等。

顺便提一句,

我确实找到了以下参考资料;但在 ASP.Net 4.0 下对我来说还没有任何效果。

ASP.NET,javascript:愚蠢烦人的撇号问题

HTMLEncode/HTMLDecode 和撇号 ASP.net

我想问题应该是如何将未转义的 javascript 代码添加到 asp.net 按钮?

提前致谢

4

2 回答 2

0

好的,

我觉得有点愚蠢,因为经过一些实验,看起来虽然 ASP.Net 4.0 的呈现方式与 ASP.Net 2.0 不同——但代码实际上仍在工作。那是按钮被禁用 - 它只是永远不会以这种方式出现。

问题是当按钮通过javascript被禁用时,没有视觉线索表明它正在发生,即:按钮没有像以前的版本那样显示为“灰色”。为了确认这一点,我更改了 prevent_multiple_submits 子例程,如下所示:

private sub prevent_multiple_submits()

dim sb as StringBuilder

sb = New StringBuilder()

sb.Append( "this.disabled=true;this.style.backgroundColor='#EFEFEF';this.style.color='#000000';this.value='Please wait...';" )
sb.Append( Page.ClientScript.GetPostBackEventReference( btn_submit, String.Empty ) )

btn_submit.Attributes.Add( "onclick", sb.ToString() )

end sub

现在——当按钮被点击时,按钮变为灰色(表示它被禁用)——这曾经在 ASP.Net 2.0 下自动发生。如果没有颜色变化——按钮永远不会显示为禁用(即使它是)——这就是 2.0 和 4.0 渲染之间的区别。

希望这对其他人有帮助。

再次感谢。

于 2013-07-14T20:34:40.423 回答
0

您可以通过完全删除prevent_multiple_submitssubonClientClick并向按钮添加属性来避免这种情况:

<asp:Button id="btn_submit" text="Submit (Click only Once)" OnClick="process_form" runat="server" onClientClick="this.value = 'Please wait...';this.disabled = true;" />

虽然我会更进一步:

onClientClick="disable(this)"

<script type="text/javascript">
    function disable(elem) {
        elem.value = "Please wait...";
        elem.disabled = true;
    }
</script>

或者使用 jQuery,也删除onClientClick

$(document).ready(function() {
    $('form').submit(function() {
        $('input[id^="btn_submit_"]').prop('disabled', true).val('Please wait...');
    });
});

另一个隐藏按钮而不是禁用的 jQuery 解决方案:

$(document).ready(function() {
    $('form').submit(function() {
        var btn = $('input[id^="btn_submit_"]');
        btn.after('<span>Please wait...</span>');
        btn.hide();
    });
});

当然,这两种 jQuery 解决方案都可以在 vanilla js 中使用,但是语法更冗长,您必须查找它。

于 2013-07-14T03:18:34.517 回答