在ASP.NET网页中调用C#变量

时间:2016-06-24 23:19:57

标签: c# asp.net vba

所以,我一直很难在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" />

1 个答案:

答案 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" />