views:

58

answers:

3

I'm having a bit of difficulty setting a variable from the code behind and utilising it in the ASP.NET page (setting it as the value inside a textbox). My webpage simply errors and says it does not exist in the current context. The variable is declared and set all in the Page_Load method.

Here is the relevant ASP.NET code. I assume you will not need to see the code behind, as I have tested outputting the variable via the codebehind (using Response.Write) and that works fine.

 <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>

Thanks :)

EDIT: Ok sure, here's the relevant parts of the code behind

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

The response.write is for debugging - it outputs the variable correctly so the variable is actually set

EDIT 2: Here is the code behind

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");
    }

What's not working is just the <%= initialpath %> in the ASP form. It simply just doesn't show anything, like the variable is assigned nothing

+2  A: 

<%# initialPath %> is a databinding expression meaning that ASP.NET will look for a initialPath property on the collection you are binding to. Obviously such property doesn't exist as this is a local variable.

Darin Dimitrov
+3  A: 

In the codebehind you need to create it as a public property. Then you can use it all you want in the aspx page.

in code behind:

public string yourvar { get; set; }

in aspx:

    <EditItemTemplate>
        <asp:TextBox ID="TextBox6" runat="server" 
            Text='<%= yourvar %>'></asp:TextBox>
    </EditItemTemplate>
CrazyDart
Cheers buddy, but for some reason the field it's supposed to be in the ASP.NET form is blank
Chris
Yes, binding expressions only work with properties
DancesWithBamboo
In your Page_Load you do need to set the content of your var, can you post sample code of whats not working? Please include the property, the pageload and the aspx.
CrazyDart
Added the relevant parts :) the actual variable is assigning as I can output it from the code behind using Response.Write, but I can't get it to transfer over using <%= initialPath %>
Chris
ok, so I think I am starting to get the situation... the TemplateField needs to have a data source. Its made to iterate over a collection of something, not just display a string.
CrazyDart
I'm using the template fields as part of a details view - most of the things I need to display in the details view are simply fields from the table so that is automatically done. For some of the fields, including this, it's installed inside a 'binary image' as I'm using Quartz.NET, and to get the information out I need to do some work in the codebehind, if that makes sense
Chris
A: 

What I don't see here is where the call to DataBind() is made. If it's made before is set then <%#initialPath%> will write its starting value (null, which gets written as an empty string in such a case). If it's not made at all, then <%#initialPath%> will never write anything. You need to make sure DataBind() is called at an appropriate time, such as at the end of Page_Load

Jon Hanna
Ah, I put DataBind at the end and it now works fine. Thanks, and thanks also to everyone who helped :)
Chris