未从 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_Load
或Page_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】:由于<%#...
是绑定表达式,您是否调用了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="<%=GetPagerStyle()%>"
应该可以正常工作。
【讨论】:
已经试过了......你最终会在视图中看到你试过了吗
<%= GetPagerStyle() %>
【讨论】:
我认为这行不通,<%= %>
是 Response.Write()
的缩写,并且对于任何服务器标记都不能作为属性有效。以上是关于未从 aspx 页面调用代码隐藏函数的主要内容,如果未能解决你的问题,请参考以下文章