所以,我一直很难在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的参数中调用。
我使用DefaultValue =“Manager”测试了这个参数函数,这是下拉列表所具有的值之一。这很有用。
但我不知道如何让它动态运作。
我试过了:
<% title %>
<%=title%>
<%Response.write(title);%>
更新:这段额外的代码也没有用。
<%: title %>
虽然当我在asp:Parameter Tag。
之外调用它时它确实有效以下是基于您最近建议的新代码:
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" />
答案 0 :(得分:1)
以下任何一种都应该可以正常工作
<%# title %>
<%: title %>
此外,如果您只是致电Response.write()
,那么为什么不直接在您的代码隐藏(.cs
)文件中调用它?不确定在.aspx
页面中调用它的重点是什么。
<div>
Data Is: <%# title %>
</div>
现在我明白了,如果没有错,你的标题变量是在方法中声明的,所以你无法访问它,因为它的范围在方法块内结束。确保在类级别声明变量。最好声明一个公共属性来获取像
这样的变量访问权限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" />