如何在ASP.NET LoginView中找到一个控件?

时间:2014-01-09 10:11:21

标签: c# asp.net sql

我在LoginView Control中找不到我的标签ID,只是为了解释我正在尝试构建的内容。如果您尚未登录,则只能看到数据库中的内容,但如果您已登录,则可以对其进行编辑。但是现在我只需要帮助就可以从数据库中读取数据

这是ASP.NET Code-Behind:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Configuration;
using System.Data.Sql;
using System.Data.SqlClient;
using System.Data;

public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
    {
        using (SqlConnection connection = new SqlConnection("Data Source=10.138.22.47;Initial Catalog=Student10157;User ID=Studentxxxxx;Password=xxxxxxxxxxxxxxxxx"))
        {
            connection.Open();

            SqlCommand cm = new SqlCommand("Select * from Content_Text", connection);
            SqlDataReader dr;
            dr = cm.ExecuteReader();
            if (dr.Read())
            {

                lblLeft.text = dr["Text"].ToString();
            } 
        }
    }
}
}

这是我的ASP.NET代码:

<asp:FormView runat="server" ID="viewdata">
    <ItemTemplate>
        <asp:LoginView ID="LoginView1" runat="server">
            <AnonymousTemplate>
                <asp:Label ID="lblLeft" runat="server"></asp:Label>
            </AnonymousTemplate>
            <LoggedInTemplate>
                <asp:TextBox ID="TxBLeft" runat="server" />
            </LoggedInTemplate>
        </asp:LoginView>
    </ItemTemplate>
</asp:FormView>

我已经尝试过,因为您可以看到使用带有以下C#代码的formview,但这不起作用var lblLeft = (Label)viewData.FindControl("lblLeft");

4 个答案:

答案 0 :(得分:2)

试试这个。

if (dr.Read())
{
    Label lblLeft = (Label)viewData.FindControl("lblLeft")
    lblLeft.text = dr["Text"].ToString();
} 

答案 1 :(得分:1)

数据源中需要

FormView,所以我认为你需要在代码中加入这样的想法

protected void Page_Load(object sender, EventArgs e)
{
    {
        using (SqlConnection connection = new SqlConnection("Data Source=10.138.22.47;Initial Catalog=Student10157;User ID=Studentxxxxx;Password=xxxxxxxxxxxxxxxxx"))
        {
            connection.Open();

            SqlCommand cm = new SqlCommand("Select * from Content_Text", connection);
            SqlDataReader dr;
            dr = cm.ExecuteReader();
            if (dr.Read())
            {
                viewdata.DataSource = new []{new { N = dr["Text"] }};
                viewdata.DataBind();

            } 
        }
    }
}

和标记

<asp:FormView runat="server" ID="viewdata">
    <ItemTemplate>
        <asp:LoginView runat="server">
            <AnonymousTemplate>
                <asp:Label ID="lblLeft" runat="server" Text='<%# Eval("N") %>'></asp:Label>
            </AnonymousTemplate>
            <LoggedInTemplate>
                <asp:TextBox ID="TxBLeft" runat="server" />
            </LoggedInTemplate>
        </asp:LoginView>
    </ItemTemplate>
</asp:FormView>

<强>更新
如果您有一些content_text,您可以尝试这样的事情

protected void Page_Load(object sender, EventArgs e)
{
    {
        using (SqlConnection connection = new SqlConnection("Data Source=10.138.22.47;Initial Catalog=Student10157;User ID=Studentxxxxx;Password=xxxxxxxxxxxxxxxxx"))
        {
            connection.Open();

            SqlCommand cm = new SqlCommand("Select * from Content_Text", connection);
            SqlDataReader dr;
            dr = cm.ExecuteReader();
            List<object> ds = new List<object>();
            while (dr.Read())
            {
                ds.Add(new { N = dr["Text"] });
            } 

            viewdata.DataSource = ds;
            viewdata.DataBind();
        }
    }
}

答案 2 :(得分:0)

您需要在其NamingContainer ItemTemplate FormView中找到标签:

protected void Page_Load(object sender, EventArgs e)
{
    if (viewdata.CurrentMode == FormViewMode.ReadOnly)
    {
        LoginView lv = (LoginView)viewdata.FindControl("LoginView1");
        Label lblLeft = (Label)lv.FindControl("lblLeft");
    }
}

顺便说一下,只有当标签不是回发时才应该对标签进行数据绑定:

if(!IsPostBack && viewdata.CurrentMode == FormViewMode.ReadOnly)
{
    LoginView lv = (LoginView)viewdata.FindControl("LoginView1");
    Label lblLeft = (Label)lv.FindControl("lblLeft");
    using (SqlConnection connection = new SqlConnection("Data Source=10.138.22.47;Initial Catalog=Student10157;User ID=Studentxxxxx;Password=xxxxxxxxxxxxxxxxx"))
    {
        connection.Open();
        using(var cm = new SqlCommand("Select TOP 1 Text from Content_Text", connection))
        using(SqlDataReader dr = cm.ExecuteReader())
        {
            if(dr.Read())
            {
                lblLeft.Text = dr.GetString(dr.GetOrdinal("Text"));
            }   
        }    
    }
}

答案 3 :(得分:0)

您可以在LoginView控件中找到标签,如下所示:

LoginView logView = (LoginView)viewdata.FindControl("LoginView1");
Label lblLeft = (Label)logView.FindControl("lblLeft");
lblLeft.Text = "Your text goes here";
相关问题