Using variable from code behind in ASP.NET
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
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>
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
<%# 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.
精彩评论