【问题标题】:How to disable postback of radiobutton based on some conditions in asp.net on client side?如何根据客户端asp.net中的某些条件禁用单选按钮的回发?
【发布时间】:2012-12-24 08:56:02
【问题描述】:

我的表单中定义了一个单选按钮列表。当用户选择任何选项时,我们会进行回发,然后执行业务逻辑。 现在的问题是,我想在用户检查单选按钮选项时添加用户确认;当用户选择确定时,只有我想继续。

示例流程:
1. 假设选中单选按钮中的 FirstItem。
2. 用户会去选择第二个项目 - 然后我想添加一个确认,比如“你确定吗” -
3.如果用户选择NO
然后我应该在没有回发的情况下恢复更改的支票
其他
执行回发,然后执行业务逻辑

代码如下:

<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<div>
    <asp:UpdatePanel ID="UpdatePanelCheckBoxes" runat="server" UpdateMode="Always">
        <ContentTemplate>
            <asp:RadioButtonList ID="rdo" runat="server" RepeatDirection="Horizontal" AutoPostBack="true"
                OnSelectedIndexChanged="LabourScheduleType_CheckedChanged">
                <asp:ListItem Text="1" Value="1" onClick="confirmcheck();"></asp:ListItem>
                <asp:ListItem Text="2" Value="2" onClick="confirmcheck();"></asp:ListItem>
            </asp:RadioButtonList>
        </ContentTemplate>
    </asp:UpdatePanel>
</div>
</form>

代码隐藏代码是这样的

我还写了一个javascript函数来控制回发

<script type="text/javascript">

    function confirmcheck() {
        var retVal = confirm("test");
        return retVal;
    }

</script>


我尝试了所有方法,例如添加 onclick 之类的属性,然后在方法中返回 false 等等。不知何故,回发总是发生,我也不知道如何恢复更改的支票!从过去的 4 个小时开始,我都为此发疯了。

EDIT1:

我在互联网上搜索并找到了解决我一半问题的方法!

  <asp:UpdatePanel ID="UpdatePanelCheckBoxes" runat="server" UpdateMode="Always">
        <ContentTemplate>
            <asp:RadioButton ID="RadioButton1" OnCheckedChanged="aaa_cc"  GroupName="aa" runat="server" AutoPostBack="true" Text="test1" />
            <asp:RadioButton ID="RadioButton2" OnCheckedChanged="aaa_cc"  GroupName="aa" runat="server" AutoPostBack="true" Text="test2" />
        </ContentTemplate>
    </asp:UpdatePanel>

文件背后的代码:

protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            RadioButton1.Attributes.Add("onClick", "this.blur(); return RadioClick(this);");
            RadioButton2.Attributes.Add("onClick", "this.blur(); return RadioClick(this);");
        }
    }

Javacript 是这样的:

<script type="text/javascript">

    function RadioClick(radioButton)
    {
        if (confirm('Are you sure?'))
        {
            __doPostBack(radioButton.id,'');
        }
        else
        {
            return false;
        }
    }

</script>

唯一的问题是当我返回 false 时,单选按钮中的值会丢失,即没有选择任何单选按钮:(

【问题讨论】:

    标签: javascript asp.net radio-button postback selectedindexchanged


    【解决方案1】:

    试试OnClientClick='return confirmcheck();'。在呈现页面时,该值将呈现为onclick 属性的值。此外,返回结果将表明默认处理是否会继续。

    OnClick 指定服务器端事件处理程序。

    【讨论】:

    • OnClientClick 到哪个控件 - RadiobuttonList 或 ListItem ?两个都试了都不行! javascript函数没有被调用并且回发发生:(
    • Here's an article 这显示了我是如何做到这一点的。它没有单选按钮,但主体是相同的。我现在没有方便的 Visual Studio,但你应该能够弄清楚为什么它不适合你。渲染的标记是什么?它是否在点击时呈现?
    • stackoverflow.com/a/2724182/443568 - 这表示没有 OnClientClick 事件!
    • 您的意思是说 RadioButtonList 或 ListItem 控件都没有 OnClientClick 属性吗? (因为我知道大多数控件都支持这个属性。)但如果它不被支持,那么OnClick 应该不变地通过。尝试修改您的代码以包含 return 就像我在我的代码中一样。
    【解决方案2】:

    试试这个:

    <asp:ListItem Text="1" Value="1" onClick="if(!confirmcheck()) return false;"></asp:ListItem>
    <asp:ListItem Text="2" Value="2" onClick="if(!confirmcheck()) return false;"></asp:ListItem>
    

    在 onClick 中返回 true 或 false 也会阻止回发,所以我们只在 confirmcheck() 为 false 时才返回。

    我测试过,它可以工作

    【讨论】:

    • 不,它不起作用!它根本不回邮!如果我返回 false,它会删除选中状态!
    【解决方案3】:

    在单选按钮的 HTML 声明中包含“EnableViewState=true”。包含此属性后,您的 EDIT1 解决方案应该可以工作,因此如果您返回 false,则状态不会丢失。

    【讨论】:

      猜你喜欢
      • 2020-11-23
      • 2015-08-24
      • 1970-01-01
      • 1970-01-01
      • 2021-11-21
      • 1970-01-01
      • 2017-06-30
      • 2022-01-23
      • 2012-10-02
      相关资源
      最近更新 更多