回发中的数据丢失

时间:2012-03-02 05:38:25

标签: c# asp.net

我需要一种方法让一段数据在回发中保持不变。除了饼干和会话之外还有其他方法吗?

我有一个列表框,点击后,所选索引更改事件会占用一个包含用户ID的会话,并将其提供给一个获取用户名的方法等。然后我使用FindControl方法在表单中找到一个按钮视图。我设置了按钮的文本属性,其中包含刚刚获取的数据,如名字和姓氏。

它适用于初始加载,但如果我第二次单击列表框中的其他记录,则不会设置text属性。

我没有写这段代码 - 我正试图制作这些代码。

这是列表框:

<asp:ListBox ID="lbxUpcommingEvents" runat="server" DataSourceID="odsUpcommingEvents" 
Rows="6" DataTextField="Title" DataValueField="id" AutoPostBack="true"
Width="206px" OnSelectedIndexChanged="lbxUpcommingEvents_OnSelectedIndexChanged"  />
选择索引的

Listbox'x已更改:

protected void lbxUpcommingEvents_OnSelectedIndexChanged(object sender, EventArgs e)
{
    pnlEventsSignUp.Visible = true;
    string _selectedItemValue = lbxUpcommingEvents.SelectedValue.ToString();

    LoadName();

}

protected void LoadName()
{
    MembershipUser user = Membership.GetUser();
    DataSetTableAdapters.MemberInfoTableAdapter da = new DataSetTableAdapters.MemberInfoTableAdapter();

    Guid _memberId = Guid.Empty;
    _memberId = new Guid(Session["myId"].ToString());
    DataSet.MemberInfoDataTable dt = da.GetMember(_memberId);
    if (dt.Rows.Count == 1)
    {
        DataSet.MemberInfoRow mr = dt[0];

        RolloverLink rlnkSignUp = (RolloverLink)(fvEventSignUp.FindControl("rlnkSignUp"));
        rlnkSignUp.Text = "I, " + mr.firstname + " " + mr.lastname + " will be attending this event.";
    }
}

这是表单视图的标记,我在其中设置了RolloverLinkBut​​ton的文本属性。

<asp:Panel runat="server" ID="pnlEventsSignUp" visible="false">
<div class="dashedline" ></div>
<asp:FormView ID="fvEventSignUp" runat="server" DataSourceID="SqlDataSource1" 
    DataKeyNames="id" Width="100%" >
    <ItemTemplate>
        <h2>
            <asp:Label Text='<%# Eval("title") %>' runat="server" ID="titleLabel" />
        </h2>
        <div class="itemdetails">
            <br />
            location:
            <h3>
                <asp:Label ID="locationLabel" runat="server" Text='<%# ShowLocationLink(Eval("locationname"),Eval("location")) %>' />
            </h3>
            <p>
                <asp:Label Text='<%# Eval("starttime","{0:D}") %>' runat="server" ID="itemdateLabel" CssClass="GeneralText" />

                <asp:Label Text='<%# ShowDuration(Eval("starttime"),Eval("endtime")) %>' runat="server" ID="Label1"  CssClass="GeneralText" />
            </p>
        </div>
        <div class="downloadevent">
            <a href="#">
                <img src="images/icon_download_event.gif" alt="Download this event to your personal calendar"
                    width="15" height="26" /></a><a href='<%# "events_download.ashx?EventID=" + Convert.ToString(Eval("id")) %>'>Add
                        this event to your personal calendar</a>
        </div>
        <Club:ImageThumbnail ID="thumb1" runat="server" ImageSize="Large" PhotoID='<%# Eval("photo") %>' />
        <p>
            <asp:Label Text='<%# Eval("description") %>' runat="server" ID="descriptionLabel" />
        </p>
        <div class="dashedline" ></div>
        <asp:Panel ID="panel1" runat="server" CssClass="actionbuttons" Visible='<%#User.IsInRole("Administrators") %>'>
            <table border="0" cellpadding="2" cellspacing="2">
                <tr>
                    <td>
                        <asp:Label runat="server" ID="Label2" Text="Action<br />Required" Width="80px" />
                    </td>
                    <td>
                        <img src="images/RedArrow.jpg" alt="Red Arrow Right" />
                    </td>
                    <td>
                        <asp:CheckBox runat="server" ID="cbxCert" Height="30px" Text="Check to Confirm Attendance" /><br />
                        <asp:CustomValidator runat="server" ID="rfvConfirm" 
                                    ErrorMessage="You must check the box to continue" Font-Bold="true"
                                    ForeColor="#cc0000" ClientValidationFunction="ensureChecked" /> <br />
                        <Club:RolloverLink ID="rlnkSignUp" runat="server"
                        />
                    </td>
                </tr>
            </table>                    
        </asp:Panel>
    </ItemTemplate>
</asp:FormView>
</asp:Panel>

2 个答案:

答案 0 :(得分:4)

您可以使用ViewState。由于您正在动态查找按钮,因此设置属性更快,然后我们可以让Asp.Net 找到按钮并通过我在下面解释的两种方法之一设置其文本:

public string rlnkSignUpText
{
    get { return Convert.ToString(ViewState["rlnkSignUpText"] ?? "default value"); }
    set { ViewState["rlnkSignUpText"] = value; }
}

替换搜索按钮的代码并将文本分配给:

rlnkSignUpText = "I, " + mr.firstname + " " + mr.lastname + " will be attending this event.";

然后使用其中一种方法设置文本到控件:

1)使用控件的OnPreRender事件:

要进行渲染,请将OnPreRender="rlnkSignUp_PreRender"添加到您的xaml中,如下所示:

<Club:RolloverLink ID="rlnkSignUp" runat="server" OnPreRender="rlnkSignUp_PreRender" />

然后在你的代码隐藏中:

protected void rlnkSignUp_PreRender(object sender, EventArgs e)
{
    RolloverLink rlnkSignUp = (RolloverLink)sender;
    rlnkSignUp.Text = rlnkSignUpText;
}

2)将属性和控制绑定在一起:

您可以使用:

绑定到属性,而不是使用控件的PreRender
<Club:RolloverLink ID="rlnkSignUp" runat="server" Text='<%# rlnkSignUpText %>' />

然后,您需要在DataBind中致电Page_PreRender(),如此:

void Page_PreRender(object sender, EventArgs e)
{
    DataBind();
}

答案 1 :(得分:1)

您是否在控件中启用了ViewState。

Enable View State