当按钮回发

时间:2016-04-24 04:01:52

标签: asp.net webforms textbox repeater viewstate

你好开发人员我真的需要这个问题的解决方案,因为我的最后一年社交网站项目问题是

我有一个Repeater,在Repeater里面我有一个文本框和一个按钮 我在转发器外面有一个标签,我显示文本框值但是 当我点击按钮,它回发到服务器比标签消失,我想显示文本框值

这就是我正在尝试的:

ASPX页面

<%@ Page Language="C#"   AutoEventWireup="true"  CodeBehind="index.aspx.cs" Inherits="SocialSite.index"  MasterPageFile="~/Master.Master"%>



<asp:Repeater runat="server" ID="repeater1">
     <ItemTemplate>

    <asp:TextBox runat="server" ID="txtComment" placeholder="write a comment..."></asp:TextBox>

    <asp:Button runat="server" ID="btnComment" Text="Post" CssClass="btn btn-primary btn-sm" OnClick="btnComment_Click"/>

  </ItemTemplate>
  </asp:Repeater>

这是转发器控制之外的标签

<asp:Label runat="server" ID="lblMsg" Text="Not working" ForeColor="Red">    </asp:Label>

代码背后:

这是我加载转发器

的页面加载事件
private void Page_Load(object sender, System.EventArgs e)
    {
        if (!IsPostBack)
        {
            DataTable dt = Helper.ExecutePlainQuery("select * from post inner join userregistration on post.uid=userregistration.uid inner join profile on userregistration.uid=profile.uid order by postid DESC");
            repeater1.DataSource = dt;
            repeater1.DataBind();
        }
    }

按钮点击:

protected void btnComment_Click(object sender, EventArgs e)
    {
        foreach (RepeaterItem item in repeater1.Items)
        {
            if (item.ItemType == ListItemType.Item || item.ItemType == ListItemType.AlternatingItem)
            {
                TextBox txtName = (TextBox)item.FindControl("txtComment");
                if (txtName != null)
                {
                    lblMsg.Text = txtName.Text;
                }
            }
        }
    }

这里我调试了按钮代码,它运行良好我的意思是我在分配给标签/ lblMsg的文本框中输入的值,但在前端标签只是消失 < / p>

我搜索这个问题但没有得到解决方案....有些人说使用Page Init .... Page OnInit .... ViewStateMode .... EnableViewState ....但不适合我< / p>

请帮助解决我的最后一年项目问题

2 个答案:

答案 0 :(得分:0)

点击按钮后再次绑定中继器。您可以创建一个单独的方法来绑定转发器,并从Page_LoadbtnComment_Click调用它:

protected void btnComment_Click(object sender, EventArgs e)
    {
        foreach (RepeaterItem item in repeater1.Items)
        {
            if (item.ItemType == ListItemType.Item || item.ItemType == ListItemType.AlternatingItem)
            {
                TextBox txtName = (TextBox)item.FindControl("txtComment");
                if (txtName != null)
                {
                    lblMsg.Text = txtName.Text;
                }
            }
        }

DataTable dt = Helper.ExecutePlainQuery("select * from post inner join userregistration on post.uid=userregistration.uid inner join profile on userregistration.uid=profile.uid order by postid DESC");
            repeater1.DataSource = dt;
            repeater1.DataBind();
    }

答案 1 :(得分:0)

您可以尝试这样做:

protected void btnComment_Click(object sender, EventArgs e)
{
    Button btnComment = sender as Button;
    RepeaterItem item = btnComment.NamingContainer as RepeaterItem;
    TextBox txtComment = item.FindControl("txtComment") as TextBox;
    lblMsg.Text = txtComment.Text;
}

在原始代码中,Label文本循环设置为转发器的每个TextBox的内容,直到设置为最终的TextBox。因此,无论单击哪个按钮,Label始终显示最后一个转发器项的文本。如果最后一个TextBox为空,则标签“消失”。