如何将div传递给while循环,asp.net c#
我正在创建一个名为facebook的社交网站,但该网站的状态设置有错误,我使用以下代码发布状态。此代码在页面加载中如何将div传递给while循环,asp.net c#,c#,jquery,html,asp.net,facebook,C#,Jquery,Html,Asp.net,Facebook,我正在创建一个名为facebook的社交网站,但该网站的状态设置有错误,我使用以下代码发布状态。此代码在页面加载中 Label1.Text = Session["Email"].ToString(); if (!IsPostBack) { //load data string db = ""; db = ConfigurationManager.ConnectionStrings["RegistrationConnectionStr
Label1.Text = Session["Email"].ToString();
if (!IsPostBack)
{
//load data
string db = "";
db = ConfigurationManager.ConnectionStrings["RegistrationConnectionString"].ConnectionString;
SqlConnection con = new SqlConnection(db);
con.Open();
try
{
SqlCommand cmd = new SqlCommand();
cmd.CommandText = "SELECT Name,Status FROM [PhotoStatusProfile] WHERE Email = @Email";
cmd.Parameters.AddWithValue("@Email", Session["Email"].ToString());
cmd.Connection = con;
SqlDataReader dr;
dr = cmd.ExecuteReader();
string status = "";
string name = "";
while (dr.Read())
{
System.Web.UI.HtmlControls.HtmlGenericControl div = new System.Web.UI.HtmlControls.HtmlGenericControl("div");
Label nameLabel = new Label();
status += dr["Status"].ToString();
name += dr["name"].ToString();
nameLabel.Text = name;
Label statusLabel = new Label();
statusLabel.Text = status;
div.Controls.Add(nameLabel);
div.Controls.Add(statusLabel);
container.Controls.Add(div);
}
con.Close();
}
我将值传递给一个名为container的div。
当我写了一个状态,说“嗨”,然后点击post按钮,但什么都没有发生,然后我刷新页面,它就有了
第二次我做同样的事打招呼
这是一个集装箱。这是一个div标签的名称
<div id="container" runat="server"> </div>
我想发布从下到下的状态,
有谁能告诉我,我应该怎么做来防止这种错误。Thaks从我所看到的情况来看,您正在将div添加到容器中,
namelab
,StatusLabel
添加到div中,每次迭代DataReader
。可能这不是您的意图,您希望添加它们一次,因为您正在status
存储status行的所有值
while (dr.Read())
{
status += dr["Status"].ToString();
name += dr["name"].ToString();
}
System.Web.UI.HtmlControls.HtmlGenericControl div = new
System.Web.UI.HtmlControls.HtmlGenericControl("div");
container.Controls.Add(div);
Label nameLabel = new Label();
nameLabel.Text = name;
div.Controls.Add(nameLabel);
Label statusLabel = new Label();
statusLabel.Text = status;
div.Controls.Add(statusLabel);
另外,在标签上添加一些ID也是个好主意我建议您始终放置标签和div,如果标签和div中没有值,则将其设置为可见false。
另外,若您动态添加控件,则始终在方法中进行
编辑:如果你想要什么(写在我的评论中),你需要一个转发器。请在中查看此教程
我建议您对代码进行以下重新分解
页面中的以下if块之间提取代码\u Load
,并创建一个名为LoadData()
的方法
如果(!IsPostBack)
{
LoadData();
}LoadData()
方法DIV
s(我指的是nameLabel和statusLabel)代替标签来显示值DIV
s
style=“float:左;”div.Style.Add("float", "left");
更新1
下面是如何添加div而不是标签
HtmlGenericControl divContainer = new HtmlGenericControl("div");
HtmlGenericControl nameDiv = new HtmlGenericControl("div");
// Not sure why you concatenate Name and Status here. I'll just use one value per each row
// status += dr["Status"].ToString();
// name += dr["name"].ToString();
nameDiv.InnerText = dr["name"].ToString();
nameDiv.Style.Add("float", "left");
divContainer.Controls.Add(nameDiv);
HtmlGenericControl statusDiv = new HtmlGenericControl("div");
statusDiv.InnerText = dr["Status"].ToString();
statusDiv.Style.Add("float", "left");
divContainer.Controls.Add(statusDiv);
container.Controls.Add(div);
更新2
既然您采用了@mybirthname解决方案(使用中继器
),我将根据div为您提供所需的设计
<asp:Repeater runat="server" ID="Repeater1">
<ItemTemplate>
<%--This is your template--%>
<div style="margin-top: 5px;">
<div style="padding: 2px; border: 1px solid black; background-color:Silver; display:table; width:600px;">
<div style="float:left;">
<div style="padding: 4px">
<asp:Image ID="Image1" runat="server" ImageUrl="~/Images/my-avatar.PNG" /> <%--Give the correct path to your image--%>
</div>
</div>
<div>
<div style="font-size: 16px; font-family: Arial, Helvetica, sans-serif; font-weight: bold; padding-top: 4px;">
<%#Eval("name") %>
<div style="float:right; font-size: 10px;">9:00 am</div> <%--If you need to have a time stamp for each entry make use of this div--%>
</div>
<div style="width:500px;"><%#Eval("Status") %></div>
</div>
</div>
</div>
<%--End template--%>
</ItemTemplate>
</asp:Repeater>
上午9点
/OT祝您成功。尝试了类似的操作,但我不得不删除它,因为它没有启动:)我应该删除什么?发布按钮的单击事件中有什么内容?看看我的答案我应该在哪里创建这个LoadData()方法?我应该在页面加载方法中创建它吗??告诉我,我想把这些状态垂直发布到。但这些都是横向发布的?如何获取新行?如何在页面加载中创建另一个方法???它应该是页面代码隐藏中的私有方法。而且,按照其他的指示,你会得到你的帖子,他们的朋友。不使用标签来显示值,而是使用div(我指的是namelab和statusLabel),我应该代表创建Label namelab=new Label()创建div对象吗;这些?是的,这就是我的意思我想发布这些东西,我想垂直发布,我知道我应该使用div而不是label,但我不知道如何创建类似label的对象。帮助我,朋友,谢谢我想要朋友,当我发布这些时,这些应该像那样显示,你对此有代码吗?嘿,谢谢朋友,我应该使用repeater而不使用容器div吗?你能告诉我吗?@Prabath你应该用div。你可以放任何你想要的元素。仅为一个元素创建html标记,当您看到一切都正常时,将此标记放入repeater,然后再放入其他元素。中继器将为数据源中的每个记录乘以html。如果答案有帮助,您可以将其标记为正确。我在page_load上粘贴了上面的代码,但它说dataset不存在,@Prabath显然是因为您不从dataset中的数据库获取数据。你需要多写50-100行。首先,您需要编写查询来获取数据,检查SqlDataAdapter和方法Fill,这将在数据集中获取数据。之后,您将把这个数据集作为中继器的数据源。我把这个留给你。
div.Style.Add("float", "left");
HtmlGenericControl divContainer = new HtmlGenericControl("div");
HtmlGenericControl nameDiv = new HtmlGenericControl("div");
// Not sure why you concatenate Name and Status here. I'll just use one value per each row
// status += dr["Status"].ToString();
// name += dr["name"].ToString();
nameDiv.InnerText = dr["name"].ToString();
nameDiv.Style.Add("float", "left");
divContainer.Controls.Add(nameDiv);
HtmlGenericControl statusDiv = new HtmlGenericControl("div");
statusDiv.InnerText = dr["Status"].ToString();
statusDiv.Style.Add("float", "left");
divContainer.Controls.Add(statusDiv);
container.Controls.Add(div);
<asp:Repeater runat="server" ID="Repeater1">
<ItemTemplate>
<%--This is your template--%>
<div style="margin-top: 5px;">
<div style="padding: 2px; border: 1px solid black; background-color:Silver; display:table; width:600px;">
<div style="float:left;">
<div style="padding: 4px">
<asp:Image ID="Image1" runat="server" ImageUrl="~/Images/my-avatar.PNG" /> <%--Give the correct path to your image--%>
</div>
</div>
<div>
<div style="font-size: 16px; font-family: Arial, Helvetica, sans-serif; font-weight: bold; padding-top: 4px;">
<%#Eval("name") %>
<div style="float:right; font-size: 10px;">9:00 am</div> <%--If you need to have a time stamp for each entry make use of this div--%>
</div>
<div style="width:500px;"><%#Eval("Status") %></div>
</div>
</div>
</div>
<%--End template--%>
</ItemTemplate>
</asp:Repeater>