对于asp:Button,如果我使用Enabled = false

时间:2017-11-16 07:55:50

标签: javascript html asp.net

在我的页面中,我有一组两个单选按钮。如果单击单选按钮2,它将激活搜索按钮。如果用户单击此搜索按钮,它将使用jQuery .ajax调用来检索数据并在jqGrid中显示。

启动时必须禁用搜索按钮。如果禁用,我的意思是如果用户点击它,则不会发生任何事情。

由于按钮是asp按钮,我使用Enabled as:

<asp:Button ID="btnSearch" Text="Search" UseSubmitBehavior="false" runat="server" Enabled="false" OnClientClick="return SearchAccessCode()" />

以下是检测/处理单选按钮组切换的代码:

$('input[name$=radioGroup]').change(function() {
    if ($('input[name$=radioGroup]:checked').val() == "rbFirst") {
        $('#<%=btnSearch.ClientID%>').prop('disabled', true);
    }
    else {
        $('#<%=btnSearch.ClientID%>').prop('disabled', false);
    }
}

当我调试页面时,单击第二个单选按钮(rbSecond)后,将启用“搜索”按钮。我点击它没有任何反应!我检查生成的HTML,发现它与其他按钮不同。没有关联的onclick()!

<input type="button" name="ctl00$MainContent$btnSearch" value="Search" id="MainContent_btnSearch" disabled="disabled" class="aspNetDisabled" />

在网络上,我知道Enabled将转换为HTML中的disabled。因此,我将Enabled替换为disabled

<asp:Button ID="btnSearch" Text="Search" UseSubmitBehavior="false" runat="server" Disabled="True" OnClientClick="return SearchAccessCode()" />

打开生成的HTML并找出它与其他asp按钮相同。含义:它有onclick()。当然,当我按下搜索按钮时,实际上会执行搜索功能!

 <input type="button" name="ctl00$MainContent$btnSearch" value="Search" onclick="return SearchAccessCode();__doPostBack(&#39;ctl00$MainContent$btnSearch&#39;,&#39;&#39;)" id="MainContent_btnSearch" Disabled="True" />

我忍不住要问为什么。由于Javascript可以插入到ASP.NET页面中,如果使用Enabled="false"(Microsoft方式)禁用了按钮,我可以使用JavaScript将其启用。但是在这个时候,我将失去按钮和onclick()指向的函数之间的联系!

1 个答案:

答案 0 :(得分:0)

这是默认行为,因为该按钮仍被禁用且没有任何功能。重新启用它,将触发PostBack并将OnClientClick添加到按钮:

<asp:UpdatePanel runat="server">
        <ContentTemplate>
            <asp:Button ID="btnSearch" Text="Search" UseSubmitBehavior="false" runat="server" Enabled="false" OnClientClick="console.log('btnSearch onClientClickEvent');" />
        </ContentTemplate>
        <Triggers>
            <asp:AsyncPostBackTrigger ControlID="Button1" EventName="Click" />
        </Triggers>
    </asp:UpdatePanel>
    <asp:Button ID="Button1" Text="Toggle Search Button" UseSubmitBehavior="false" runat="server" OnClick="Button1_Click" />

的.cs:

protected void Button1_Click(object sender, EventArgs e) => btnSearch.Enabled = !btnSearch.Enabled;

如果你想将OnClientClick事件保持为标记,即使按钮被禁用,你也必须使用javascript,因此不会触发PostBack:

document.getElementById("<%= btnSearch.ClientID %>").disabled = true;

或者如您所说,只需使用disabled属性:

<asp:Button ID="btnSearch" Text="Search" UseSubmitBehavior="false" runat="server" disabled OnClientClick="console.log('btnSearch onClientClickEvent');" />