未从 aspx 页面调用代码隐藏函数

Posted

技术标签:

【中文标题】未从 aspx 页面调用代码隐藏函数【英文标题】:Codebehind function not being called from aspx page 【发布时间】:2012-03-08 22:46:13 【问题描述】:

可能是“doh”时刻,但无法触发此代码隐藏函数。实际上调试显示它甚至没有被调用,这可能表明最终显示在网页上时,只能看到:

<table id="dnn_ctr422_ViewPloads_PagerTable">.... 

请注意缺少的“样式”。任何帮助将不胜感激。

//aspx code
<table id="PagerTable" style="<%# GetPagerStyle() %>" runat="server">
   <tr>
   <td> 
      <asp:DataPager ID="PloadPager" runat="server" PagedControlID="PloadListView" OnPreRender ="PloadPager_PreRender" PageSize="20" >

//code behind      
protected String GetPagerStyle( )
    
        return "background-color:" + (String)Settings["TableBackgroundColor"];
    

【问题讨论】:

没有没有调用page.databind。我很可能在这里使用了错误的语法... 【参考方案1】:

从您显示的内容来看,尚不清楚它为什么不运行。您运行的版本可能与您的源代码不同,但我假设您已经尝试过完全重建。

知道您也可以在 ASPX 页面中设置断点。但我的直觉是,如果不调用这个,就不会调用更多。您是否尝试过在Page_LoadPage_PreRender 上破解?

另一种可能性是,在调用 GetPagerStyle 之前,您的 PagerTable 对象已被其他代码更改。在这种情况下,如果在运行之前更改样式属性可能会产生此问题。一种解决方法并确定您是否真的可以设置样式是在 Page_Load 中执行以下操作:

// correction courtesy of Tim Schmelter ;)
PagerTable.Style.Add(htmlTextWriterStyle.BackgroundColor, 
    (String)Settings["TableBackgroundColor"]);

编辑:请注意,正如其他人指出的那样,以下内容也应该有效(尝试过,因为存在一些争议,请参阅其他答案):

<table id="PagerTable" style="<%= GetPagerStyle() %>">

但是,请注意我删除了runat="server"。这意味着,您不能再从代码隐藏中使用它。我只是假设你没有在代码隐藏中使用这个控件做任何其他事情,所以这是否适用于你的情况我不知道。

【讨论】:

是的,其他功能正在调试器中被命中(aspx 页面比这个 sn-p 还要多)。我怀疑我只是没有使用正确的语法。【参考方案2】:

由于&lt;%#... 是绑定表达式,您是否调用了Page.DataBind

inline asp.net tags... sorting them all out

除此之外,您始终可以从代码隐藏中设置这些内容:

protected void Page_Load(object sender, EventArgs e)

    PagerTable.Style.Add("background-color", (String)Settings["TableBackgroundColor"]);

【讨论】:

您好,指出绑定表达式,这可能是 OP 需要更改的内容。 从技术上讲,它不是绑定...那么如何构造函数还是应该只采用 page_load 方法? @Gio:它一个绑定表达式,它只对数据绑定控件隐式起作用。对于所有其他人,您需要致电 control.DataBind() 或只是 Page.DataBind()(当然来自代码隐藏)。我更喜欢代码隐藏方法,因为您已经在使用它。不要将gui和逻辑混为一谈。您的 GetPagerStyle 方法已经将该功能与此页面进行硬链接,并且不可重复使用(除了复制/粘贴)。 @Tim:所以你推荐使用 page_load 方法? @Gio:Page_Load 还是 Page_Init,你可以决定。并直接设置Style【参考方案3】:

只需将代码中的 # 替换为 =,

style="&lt;%=GetPagerStyle()%&gt;" 应该可以正常工作。

【讨论】:

已经试过了......你最终会在视图中看到 ...... @CanYener: &lt;%= %&gt;Response.Write() 的缩写,对于任何服务器标签来说,它都不能作为属性有效。如果你不需要你的表在后面的代码中,你可以删除 runat 属性并重试,正如我现在注意到的,你的表有 runat="server" 属性,所以你的方法不是脚本不再,它只是一个纯文本。
【参考方案4】:

你试过了吗

<%= GetPagerStyle() %>

【讨论】:

我认为这行不通,&lt;%= %&gt;Response.Write() 的缩写,并且对于任何服务器标记都不能作为属性有效。

以上是关于未从 aspx 页面调用代码隐藏函数的主要内容,如果未能解决你的问题,请参考以下文章

如何延迟调用javascript函数?

带有ajax的django:函数未从源文件加载

页面调用了错误的代码隐藏?

未从 main.cpp C++ 调用 C 函数

reactjs中未从父级调用子组件函数

Ajax / PHP:调用正常,但未从 PHP 发出警报结果