[英]Calling C# variable in ASP.NET Webpage
因此,我一直很难在ASP.NET网页中调用此C#变量。
Employee Title: <asp:DropDownList ID="titles" runat="server" DataSourceID="SqlDataSource1" DataTextField="Title" DataValueField="Title" AutoPostBack="True"></asp:DropDownList>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:LargeEmployeeConnectionString %>" ProviderName="<%$ ConnectionStrings:LargeEmployeeConnectionString.ProviderName %>" SelectCommand="SELECT DISTINCT [Title] FROM [Employees]"></asp:SqlDataSource>
</div>
<%
string title = "Manager";
if (titles.SelectedItem != null)
{
title = titles.SelectedItem.Value;
}
%>
<asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:LargeEmployeeConnectionString %>" ProviderName="<%$ ConnectionStrings:LargeEmployeeConnectionString.ProviderName %>" SelectCommand="SELECT * FROM [Employees] WHERE ([Title] = ?)">
<SelectParameters>
<asp:Parameter DefaultValue="<%Response.Write(title);%>" Name="Title" Type="String" />
</SelectParameters>
</asp:SqlDataSource>
<asp:GridView ID="GridView1" runat="server" DataSourceID="SqlDataSource2" AutoGenerateColumns="true" DataKeyNames="EmployeeID">
</asp:GridView>
如您所见,变量标题在DataSource2的Parameters中被调用。
我使用DefaultValue =“ Manager”测试了此参数功能,这是下拉列表将具有的值之一。 那行得通。
但是我不知道如何使它动态地工作。
我努力了:
<% title %>
<%=title%>
<%Response.write(title);%>
更新:此附加代码段也不起作用。
<%: title %>
虽然它确实有效,但是我在asp:Parameter标签之外调用它时却如此。
这是根据您最近的建议提供的新代码:
ASP.NET:
<form id="form1" runat="server">
<div>
Employee Title: <asp:DropDownList ID="titles" runat="server" DataSourceID="SqlDataSource1" DataTextField="Title" DataValueField="Title" AutoPostBack="True"></asp:DropDownList>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:LargeEmployeeConnectionString %>" ProviderName="<%$ ConnectionStrings:LargeEmployeeConnectionString.ProviderName %>" SelectCommand="SELECT DISTINCT [Title] FROM [Employees]"></asp:SqlDataSource>
</div>
<%
string title = "Manager";
if (titles.SelectedItem != null)
{
title = titles.SelectedItem.Value;
Title = title;
}
%>
Title Is: <%=Title%>
<asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:LargeEmployeeConnectionString %>" ProviderName="<%$ ConnectionStrings:LargeEmployeeConnectionString.ProviderName %>" SelectCommand="SELECT * FROM [Employees] WHERE ([Title] = ?)">
<SelectParameters>
<asp:Parameter DefaultValue="<%=Title%>" Name="Title" Type="String" />
</SelectParameters>
</asp:SqlDataSource>
<asp:GridView ID="GridView1" runat="server" DataSourceID="SqlDataSource2" AutoGenerateColumns="true" DataKeyNames="EmployeeID">
</asp:GridView>
</form>
C#:
public partial class Part1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
public string Title
{
get; set;
}
}
最终解决方案:
<asp:ControlParameter ControlID="titles" DefaultValue="Manager" Name="Title" PropertyName="SelectedValue" Type="String" />
以下任何一种都可以正常工作
<%# title %>
<%: title %>
此外,如果您只是调用Response.write()
那么为什么不直接在您的代码隐藏( .cs
)文件中调用它呢? 不知道在.aspx
页中调用它有什么意义。
<div>
Data Is: <%# title %>
</div>
现在,我明白了,如果没有记错的话,您的title变量是在方法中声明的,因此您将无法访问它,因为它的作用域位于方法块内。 确保在类级别声明了该变量。 更好地声明一个公共属性以获得变量访问,例如
public string Title
{
get; set;
}
在您的方法块中将其设置为
string title = "Manager";
if (titles.SelectedItem != null)
{
title = titles.SelectedItem.Value;
Title = title;
}
在aspx中然后访问它
<asp:Parameter DefaultValue="<%=Title%>" Name="Title" Type="String" />
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.