【问题标题】:Passing code behind parameter to Ext.Net control将参数后面的代码传递给 Ext.Net 控件
【发布时间】:2012-09-28 14:52:37
【问题描述】:

我在控制后的代码中有一个变量。我想将此值传递给 Web 控件中的 Ext.Net 控件。在我的实例中,我有一个 ext.multicombo,我想将一个值传递给它的 Tooltip。

代码背后:

protected override void OnPreRender(EventArgs e)
{
this.MaxFuelFilter = System.Configuration.ConfigurationManager.AppSettings["MyVariable"]; 
}

控件.aspx

<ext:multicombo ID="ddlFlightNumber" runat="server" ClientID="ddlFlightNumber" IndicatorTip="blah blah blah  <%=MyVariable%> blah blah blah"></ext:multicombo>

我该如何做这样的事情?

谢谢

【问题讨论】:

    标签: c# ext.net


    【解决方案1】:

    有几个问题:

    您使用的语法不适用于 ASP.NET 控件。这是 ASP.NET 的限制,与 Ext.NET 无关。

    这不是有效的 ASP.NET 语法:

    PropertyName="foo foo <%=MyVariable%>"
    

    而且,这不是有效的 ASP.NET 语法:

    PropertyName="<%=MyVariable%>"
    

    要将值传递给属性,您需要使用&lt;%# %&gt; DataBinding 语法。

    虽然,这也不是有效的 ASP.NET 语法:

    PropertyName="foo foo <%# MyVariable %>"
    

    属性必须只包含数据绑定变量/脚本,示例

    PropertyName="<%# MyVariable%>"
    

    并且...您必须在控件上调用 .DataBind(),例如

    this.MyControl1.DataBind();
    

    或者,使用 Ext.NET 控件,您可以设置 .AutoDataBind="true" 属性,DataBinding 将自动为您处理,例如

    <ext:TextField runat="server" PropertyName="<%# MyVariable%>" AutoDataBind="true" />
    

    上述自定义属性已自动序列化为 JavaScript,现在可供该控件(和其他)的客户端实例使用。然后,您可以从其他 JavaScript 代码调用该属性。

    对于您的方案,我建议利用&lt;ext:MultiCombo&gt;&lt;AfterRender&gt; 侦听器来获取属性值并设置其他内容。以下示例演示了完整的场景 (myVar),还演示了另一种基本技术 (myVar2),用于将 JavaScript 变量从服务器端传递到客户端。

    示例

    <%@ Page Language="C#" %>
    
    <%@ Register assembly="Ext.Net" namespace="Ext.Net" tagprefix="ext" %>
    
    <script runat="server">
        string myVar;
        string myVar2;
    
        protected void Page_Load(object sender, EventArgs e)
        {
            myVar = "Label 1";
            myVar2 = "Label 2";
        }
    </script>
    
    <!DOCTYPE html>
    
    <html>
    <head runat="server">
        <title>Ext.NET Example</title>
    </head>
    <body>
        <form runat="server">
            <ext:ResourceManager runat="server" />
    
            <ext:TextField 
                ID="TextField1" 
                runat="server" 
                MyVar="<%# myVar %>"
                AutoDataBind="true" 
                FieldLabel="Testing">
                <Listeners>
                    <AfterRender Handler="this.setFieldLabel(this.myVar);" />
                </Listeners>
            </ext:TextField>
    
            <ext:TextField 
                ID="TextField2" 
                runat="server" 
                MyVar="<%# myVar2 %>"
                AutoDataBind="true" 
                FieldLabel="Testing">
                <Listeners>
                    <AfterRender Handler="this.setFieldLabel(myVar2);" />
                </Listeners>
            </ext:TextField>
    
            <script type="text/javascript">
                var myVar2 = "<%= myVar2 %>";
            </script>
        </form>
    </body>
    </html>
    

    您应该能够调整上述内容以使用您的自定义控件。

    希望这会有所帮助。

    【讨论】:

    • 感谢您的回复杰弗里。我有点困惑。我是在创建一个文本字段并将其传递给多组合控件的工具提示吗?
    • 您可以使用您喜欢的任何组件传递值。如果您可以提供一个简化的代码示例来演示您的场景,我相信我们可以提供进一步的建议。您提供的信息在细节上有点薄。
    【解决方案2】:

    MyVariable 在哪里定义?如果它是页面类的publicprotected 成员并且在页面生命周期中足够早地初始化(Page_Init 也许?也许Page_Load 但我会仔细检查并测试它)那么这种方法应该工作。

    【讨论】:

    • 我在 OnPreRender 中设置 var。问题是我找不到正确的语法来将值放入 ext 控件。
    • @hoakey:您能否更新问题以显示MyVariable 是如何声明和初始化的?
    猜你喜欢
    • 2014-04-05
    • 1970-01-01
    • 1970-01-01
    • 2014-09-26
    • 2013-03-19
    • 1970-01-01
    • 2021-02-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多