【问题标题】:How to disable a Button in ASP.Net如何在 ASP.Net 中禁用按钮
【发布时间】:2014-10-31 09:42:39
【问题描述】:

我在禁用 ASP.net 中的按钮时遇到了很大的问题。 当我禁用客户端的按钮时,回发后启用该按钮。 当我禁用服务器端的按钮时,我无法保存掩码,因为按钮不在。

我该如何解决这个问题? 保存动作在第一次 Preload/PostBack 上执行。 这意味着第二个 PostBack 和之后的所有内容都不应执行保存过程。

我的 Button 在每次预加载后都会创建新的。我怎样才能给这个按钮一个固定的 ID,以便它始终是我正在覆盖并且我可以访问的同一个对象。

在 .cs 中:

    private void AddSaveButton()
    {
        ActionButton b = new ActionButton(GetString(6025));
        b.ID = "ButtonSave";
        b.ClientInstanceName = "ButtonSave";
        b.UseSubmitBehavior = true;
        b.Click += new EventHandler(save_event);
        DivButton.Controls.Add(b);
    }

在 aspx 中:

 <div runat="server" id="DivButton" style="margin-top: 10px; padding-bottom: 15px; float: left">

动作按钮:

public class ActionButton : DevExpress.Web.ASPxEditors.ASPxButton
{
    public ActionButton(string text)
    {
        this.Text = text;
        this.CssClass = "actionButton";
        this.CssPostfix = "actionButton";
        this.AllowFocus = false;
        this.UseSubmitBehavior = false;
        this.CausesValidation = true;
    }
}

【问题讨论】:

  • 您在哪个阶段禁用了按钮?
  • 参见my answer - 但坦率地说,我很困惑为什么您在.cs 文件而不是.aspx 文件中创建按钮。

标签: c# javascript asp.net devexpress


【解决方案1】:

您可以在每次创建按钮时分配css-class

这样做您可以使用jQuery 执行以下操作

 $('.className').attr("disabled", true);

使用javascript将需要使用document.getElementsByClassName

【讨论】:

  • 我不能使用 jQuery。对不起。
  • 你不能使用jQuery?不,任何人都可以使用 jQuery。那就对不起你了!!。试试Javascript解决方案
【解决方案2】:

您可以简单地使用javascript 来禁用您的按钮。

  <script type="text/javascript">
    function disableBtn() 
    {
    document.getElementById("DivButton").disabled=true
    }
  </script>

【讨论】:

    【解决方案3】:

    您可以通过使用属性ClientIDMode 并将其设置为Static 来获取固定ID。而且,您可以使用 JavaScript 访问控件,如下例所示:

    <script type="text/javascript">
      function DoSomething() {
        alert('<%= Control.ClientID %>');
      }
    </script>
    

    更多信息:http://www.codeproject.com/Articles/34151/ASP-NET-4-0-Client-ID-Feature

    【讨论】:

    • 听起来不错,但我不明白如何解决我的按钮问题。我的按钮代码在我的帖子中,你能给我一个例子来说明我如何设置一个静态 id,然后在预加载后访问这个 id 吗?
    • 如果将按钮的属性ClientIDMode设置为Static,则可以直接使用您为此控件设置的ID(该控件是HTML中的渲染器,具有您定义的相同ID,无需添加任何东西)。我想我不明白你的问题出在哪里。
    • 这是什么意思?
    • Static 自 4.0 起才可用
    • f*#k 我!确实如此!对不起我的无知:(
    【解决方案4】:

    我不确定您所说的“我的按钮是在每次预加载后创建的”或“我无法保存掩码”是什么意思。

    如果您想影响回发时的启用状态,您可以执行以下任一操作:

    button.Enabled = false;
    

    button.Attributes.Add("disabled", "disabled");
    

    【讨论】:

    • 那是我已经尝试过的......它没有奏效,因为我的 addbutton mathod(看我的帖子)被每个 Preload 调用。每次按下按钮时都会有一个预加载...
    【解决方案5】:

    来自您的comment

    每个 Preload 都会调用我的 addbutton mathod(查看我的帖子)。每次按下按钮都会有一个预加载

    不要将按钮的创建放在Pre_Load 中,将其放在Page_Load 中并检查IsPostBack

    【讨论】:

    • 它已经在 Page_Load 中(对不起,我写的没有理解),我也试图检查 IsPostBack。问题是当我按下保存按钮时,保存操作首先由第一个 PostBack 执行。所以它不应该被第二次回发执行。
    • 为什么不在.aspx 文件中创建按钮?
    • 这样做没有任何意义。但这有什么影响吗?
    【解决方案6】:

    如果您想从.cs 文件中添加按钮并且不能将按钮放在.aspx 文件中,您可以在Page_Init 事件中添加按钮,如下所示。

    protected void Page_Init(Object sender, EventArgs e)
    {
        AddSaveButton();
    }
    

    Page_Init 中添加按钮将使其在每次回帖期间保持其State

    按原样添加保存按钮的方法...

    private void AddSaveButton()
    {
        ActionButton b = new ActionButton(GetString(6025));
        b.ID = "ButtonSave";
        b.ClientInstanceName = "ButtonSave";
        b.UseSubmitBehavior = true;
        b.Click += new EventHandler(save_event);
        DivButton.Controls.Add(b);
    }
    

    现在,您可以从页面中的 save_event 中找到该按钮并像这样禁用它...

    protected void save_event(Object sender, EventArgs e)
    {
        ActionButton b = (ActionButton)this.FindControl("ButtonSave");
        b.Enabled = false;
        //do your saving stuff here...
    }
    

    此后,每次回发时按钮都会被禁用。

    编辑:

    好吧,如果您是从.aspx 添加此按钮,那么您可以直接将其设置为启用 false,如下所示。

    ButtonSave.Enabled = false;
    

    而不是

    ActionButton b = (ActionButton)this.FindControl("ButtonSave");

    b.Enabled = false;

    【讨论】:

    • 这听起来是个好主意,但他告诉我 FindControls 没有定义
    • @besnep 代码中有错字。我现在已经编辑了答案。实际的方法名称是 FindControl 而不是 FindControls
    • 页面上添加的按钮是否正确?你有没有从Button 类扩展ActionButtonGetString(6025) 方法的目的是什么?
    • 我已经从 aspx 添加了按钮代码。 GetString(6025) 适用于不同的语言。当我调试时,按钮显示并且功能正确。
    • 您能告诉ActionButton 的引用命名空间吗?您可以通过在代码中将光标放在ActionButton 上时按F12 来找到它。或者右键单击并选择Go To Definition
    猜你喜欢
    • 1970-01-01
    • 2012-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-02
    • 2018-01-23
    • 2011-02-23
    • 1970-01-01
    相关资源
    最近更新 更多