【问题标题】:Using variable from code behind in ASP.NET在 ASP.NET 中使用代码中的变量
【发布时间】:2010-10-04 15:38:34
【问题描述】:

我在从后面的代码中设置变量并在 ASP.NET 页面中使用它(将其设置为文本框中的值)时遇到了一些困难。我的网页只是出错并说它在当前上下文中不存在。该变量在 Page_Load 方法中声明和设置。

这里是相关的 ASP.NET 代码。我假设您不需要查看背后的代码,因为我已经测试了通过代码隐藏(使用 Response.Write)输出变量并且效果很好。

 <asp:TemplateField HeaderText="Initial Path" 
                SortExpression="Initial_Path">
                <EditItemTemplate>
                    <asp:TextBox ID="TextBox6" runat="server" 
                        Text='<%# initialPath %>'></asp:TextBox>
                </EditItemTemplate>
                <InsertItemTemplate>
                    <asp:TextBox ID="TextBox8" runat="server" 
                        Text='<%# initialPath %>'></asp:TextBox>
                </InsertItemTemplate>
                <ItemTemplate>
                    <asp:Label ID="Label8" runat="server" Text='<%# initialPath %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>

谢谢:)

编辑:好的,下面是代码的相关部分

       string schedID = sched.SchedulerInstanceId;
        JobDetail jobDetail2 = sched.GetJobDetail(Request.QueryString["JOB_NAME"], "sched1");
        JobDataMap dataMap2 = jobDetail2.JobDataMap;
        initialPath = dataMap2.GetString("initialPath");
        Response.Write(initialPath);

response.write 用于调试 - 它正确输出变量,因此实际设置了变量

编辑 2:这是背后的代码

public partial class EditJobDetails : System.Web.UI.Page
    {
    public string initialPath { get; set; }

    protected void Page_Load(object sender, EventArgs e)
    {

        //Scheduler stuff for Quartz.NET, removed because of length

        string schedID = sched.SchedulerInstanceId;
        JobDetail jobDetail2 = sched.GetJobDetail(Request.QueryString["JOB_NAME"], "sched1");
        JobDataMap dataMap2 = jobDetail2.JobDataMap;
        initialPath = dataMap2.GetString("initialPath");
    }

不工作的只是 ASP 表单中的 。它只是没有显示任何东西,就像变量没有被分配一样

【问题讨论】:

  • 您的代码隐藏对于这个问题来说至少是。你也可以给我们看看吗?
  • 我认为我们需要更多信息,正如柯克所说。编辑仍然没有告诉我们“initialPath”是否是公共的,或者它是否通过属性访问......
  • 对不起,我现在已经把变量公开了,就像下面的 CrazyDart 演示的那样,所以变量声明是这样的:
  • 公共字符串 initialPath { get;放; }

标签: c# asp.net variables


【解决方案1】:

在代码隐藏中,您需要将其创建为公共属性。然后就可以在aspx页面中随意使用了。

在后面的代码中:

public string yourvar { get; set; }

在 aspx 中:

    <EditItemTemplate>
        <asp:TextBox ID="TextBox6" runat="server" 
            Text='<%= yourvar %>'></asp:TextBox>
    </EditItemTemplate>

【讨论】:

  • 干杯哥们,但由于某种原因,它应该在 ASP.NET 表单中的字段是空白的
  • 在您的 Page_Load 中您确实需要设置您的 var 的内容,您可以发布什么不起作用的示例代码吗?请包括属性、页面加载和 aspx。
  • 添加了相关部分 :) 实际变量正在分配,因为我可以使用 Response.Write 从后面的代码中输出它,但我无法使用 将其传输过来
  • 好的,所以我想我开始了解情况了...... TemplateField 需要有一个数据源。它是用来迭代一些东西的集合,而不仅仅是显示一个字符串。
  • 我将模板字段用作详细信息视图的一部分 - 我需要在详细信息视图中显示的大部分内容只是表格中的字段,因此可以自动完成。对于某些字段,包括这个,它安装在“二进制图像”中,因为我正在使用 Quartz.NET,为了获取信息,我需要在代码隐藏中做一些工作,如果这有意义的话
【解决方案2】:

我在这里看不到调用DataBind() 的地方。如果它是在设置之前创建的,那么&lt;%#initialPath%&gt; 将写入它的起始值(null,在这种情况下它被写为一个空字符串)。如果根本没有制作,那么&lt;%#initialPath%&gt; 将永远不会写任何东西。您需要确保在适当的时间调用DataBind(),例如在Page_Load 的末尾

【讨论】:

  • 啊,我把 DataBind 放在最后,它现在可以正常工作了。谢谢,也感谢所有帮助过的人:)
【解决方案3】:

&lt;%# initialPath %&gt; 是一个数据绑定表达式,这意味着 ASP.NET 将在您绑定到的集合上查找 initialPath 属性。显然这样的属性不存在,因为这是一个局部变量。

【讨论】:

    猜你喜欢
    • 2016-06-21
    • 1970-01-01
    • 2018-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多