繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM