【问题标题】:Server side button click does not fire when I use it in RadAjaxManager当我在 RadAjaxManager 中使用它时,服务器端按钮单击不会触发
【发布时间】:2017-08-11 15:20:53
【问题描述】:

我在 RadAjaxManager 中使用了几个设置。我有一个服务器控制 asp 按钮,单击它会重新加载整个页面。为了防止我把这个设置放在 RadAjaxManager 中

<telerik:AjaxSetting AjaxControlID="btnPrint">
    <UpdatedControls>
        <telerik:AjaxUpdatedControl ControlID="btnPrint" LoadingPanelID="RadAjaxPanel"/>
    </UpdatedControls>
</telerik:AjaxSetting>

但由于某种原因,我的点击事件背后的代码没有触发。有什么想法请教

 <telerik:RadAjaxPanel ID="RadAjaxPanel"  PostBackControls="btnPrint" runat="server">
     <div class="grid-wrapper" id="subcodeDiv" style="padding: 0px; margin-top: 20px; margin-left: 0; margin-right: 0px; width: 1160px; float: left; overflow: hidden">
         <table class="subcodesdata">
            <tr>
              <td>
                <asp:Button ID="btnPrint" runat="server" Text="Print" CssClass="button" OnClick="btnPrint_Click" ></asp:Button>
              </td>
            </tr>
         </table>
    </div>
</telerik:RadAjaxPanel>

【问题讨论】:

  • 在您的telerik:RadAjaxPanel 中设置了PostBackControls="btnPrint"
  • 是的,我试过了。请参阅我更新的问题。可惜还是不行
  • 尝试在AjaxSetting 中引用AjaxPanel 而不仅仅是按钮。与:&lt;telerik:AjaxSetting AjaxControlID="RadAjaxPanel"&gt;&lt;telerik:AjaxUpdatedControl ControlID="RadAjaxPanel1" /&gt;
  • 我无法重现您的问题。我可以问一点minimal reproducible example 吗?因为我们作为调试工具使用的8个魔法球实际上是不可用的。因为有人已经在用它调试他的代码了。

标签: asp.net ajax webforms telerik radajaxmanager


【解决方案1】:

虽然这是一个旧线程,但如果其他人仍在努力解决它,它可以解决问题。这里的问题是您不能让按钮自行更新。好吧,您可以,但是您的页面将无法按预期工作。相反,该按钮应更新辅助控件。当您让按钮在每次单击时自行更新时,它只会自行重置,因此永远不会触发服务器端功能。

所以这是正确的做法:

<telerik:RadScriptManager runat="server" ID="RadScriptManager1" />

<telerik:RadAjaxManager ID="ajaxmanager1" runat="server" EnableAJAX="true">
    <AjaxSettings>
        <telerik:AjaxSetting AjaxControlID="btnPrint">
            <UpdatedControls>
                <telerik:AjaxUpdatedControl ControlID="subcodeDiv" />
           </UpdatedControls>
        </telerik:AjaxSetting>
    </AjaxSettings>
</telerik:RadAjaxManager>

但是,我不确定 Telerik 控件是否会更新 div。我知道它们可以很好地处理控件而不是 div。

即便如此,我认为按钮不应该在您尝试更新的 div 内。

无论如何,如果上面的示例不起作用,请尝试以下示例。它肯定会起作用——请注意我用标签控件替换了 div:

<telerik:RadScriptManager runat="server" ID="RadScriptManager1" />
	
<telerik:RadAjaxManager ID="ajaxmanager1" runat="server" EnableAJAX="true">
	<AjaxSettings>
		<telerik:AjaxSetting AjaxControlID="btnPrint">
			<UpdatedControls>
				<telerik:AjaxUpdatedControl ControlID="label1" />
			</UpdatedControls>
		</telerik:AjaxSetting>
	</AjaxSettings>
</telerik:RadAjaxManager>

<asp:Button ID="btnPrint" runat="server" Text="Print" CssClass="button" OnClick="btnPrint_Click" ></asp:Button>
<asp:label autopostback="true" id="label1" runat="server" visible="true"></asp:label>

【讨论】:

    【解决方案2】:

    问题是您将RadAjaxManagerRadAjaxPanel 应用到同一个按钮,这是错误且不必要的。您只需要在此处选择其中一种方法。

    请尝试以下工作代码示例。当您单击打印按钮 1 时,文本将加载到 span 标记中并显示在屏幕上,而不会刷新页面。打印按钮 2 也一样。

    RadAjaxPanel方法

        <telerik:RadAjaxPanel runat="server" ID="rap" PostBackControls="btnPrint2">
                <div class="grid-wrapper">
                <table class="subcodesdata">
                    <tr>
                        <td>
                            <asp:Button ID="btnPrint2" runat="server" Text="Print 2" CssClass="button" OnClick="btnPrint2_Click"></asp:Button>
                            <br />
                            <span runat="server" id="span2"></span>
                        </td>
                    </tr>
                </table>
            </div>
        </telerik:RadAjaxPanel>
    
        protected void btnPrint2_Click(object sender, EventArgs e)
        {
            span2.InnerHtml = "Print button 2 clicked...";
        }
    

    RadAjaxManager方法

    <telerik:RadAjaxManager ID="ram" runat="server">
            <AjaxSettings>
                <telerik:AjaxSetting AjaxControlID="btnPrint1">
                    <UpdatedControls>
                        <telerik:AjaxUpdatedControl ControlID="subcodeDiv" />
                    </UpdatedControls>
                </telerik:AjaxSetting>
            </AjaxSettings>
    </telerik:RadAjaxManager>
    <div class="grid-wrapper" id="subcodeDiv" runat="server">
            <table class="subcodesdata">
                <tr>
                    <td>
                        <asp:Button ID="btnPrint1" runat="server" Text="Print 1" CssClass="button" OnClick="btnPrint1_Click"></asp:Button>
                        <br />
                        <span runat="server" id="span1"></span>
                    </td>
                </tr>
            </table>
        </div>
        protected void btnPrint1_Click(object sender, EventArgs e)
        {
            span1.InnerHtml = "Print button 1 clicked...";
        }
    

    【讨论】:

    • 我都试过了。第一种方法(RadAjaxPanel)停止事件的触发,第二种方法(RadAjaxManager)有刷新问题。
    • @user2837961 我注意到第二种方法中有一个错字,其中AjaxControlID 被赋予了错误的值。我已经用正确的控件 ID 更新了它,所以请再试一次,它不应该给你刷新问题。
    猜你喜欢
    • 2014-07-20
    • 1970-01-01
    • 1970-01-01
    • 2018-08-28
    • 2013-05-01
    • 1970-01-01
    • 2019-03-05
    • 1970-01-01
    • 2017-12-08
    相关资源
    最近更新 更多