为ASP.NET标记中的下拉列表创建属性

vnjpjtjt  于 12个月前  发布在  .NET
关注(0)|答案(1)|浏览(111)

如果可能的话,我需要能够在标记中向ASP.NET中的下拉列表添加属性。我遇到了与here相同的问题。下面动态创建的代码在回发时不会持久。

protected void FormGV_RowDataBound(object sender, GridViewRowEventArgs e){ 
...
listItem.Attributes.Add("DateOfService", form.sfc.DateOfThisService.ToString());
AnswerDD.Items.Add(listItem);
...

字符串
然后在一个按钮点击事件中,我使用了属性,但它是空的。

dateOfWork = AnswerDD.SelectedItem.Attributes["DateOfService"].ToDate();


我可以确认属性最初是存储的。我研究了页面的生命周期,并不完全确定如何使用什么方法来添加动态代码以使其持久化。正如您所看到的,我使用RowDataBound方法动态创建属性,因此无法使用PreInit方法。因此,我希望在标记中创建属性,然后动态填充它。我应该在调用属性的计数为0,因此属性并不是空的,它只是不存在。

gkl3eglg

gkl3eglg1#

若要将属性添加到ASP.NET标记中的属性列表并确保其在回发过程中保持不变,可以使用ViewState存储属性值。下面是如何实现此目的的示例:
1.将OnDataBound属性添加到标记中的GridView:

<asp:GridView ID="YourGridViewID" runat="server" OnRowDataBound="FormGV_RowDataBound" OnDataBound="GridView_DataBound">
    <!-- Your GridView markup here -->
</asp:GridView>

1.在代码隐藏中,修改RowDataBound事件处理程序以将属性值存储在ViewState

protected void FormGV_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        DropDownList AnswerDD = (DropDownList)e.Row.FindControl("YourDropDownListID"); // Replace with your actual DropDownList ID
        ListItem listItem = new ListItem("YourText", "YourValue");

        // Populate the DropDownList dynamically
        listItem.Attributes.Add("DateOfService", form.sfc.DateOfThisService.ToString());
        AnswerDD.Items.Add(listItem);

        // Store the attribute value in ViewState
        ViewState[AnswerDD.ClientID + "_DateOfService"] = form.sfc.DateOfThisService.ToString();
    }
}


1.实现OnDataBound事件处理程序以在回发时设置回属性值:

protected void GridView_DataBound(object sender, EventArgs e)
{
    foreach (GridViewRow row in YourGridViewID.Rows)
    {
        if (row.RowType == DataControlRowType.DataRow)
        {
            DropDownList AnswerDD = (DropDownList)row.FindControl("YourDropDownListID"); // Replace with your actual DropDownList ID

            // Retrieve the attribute value from ViewState and set it back
            if (ViewState[AnswerDD.ClientID + "_DateOfService"] != null)
            {
                string dateOfService = ViewState[AnswerDD.ClientID + "_DateOfService"].ToString();
                ListItem listItem = AnswerDD.Items.FindByValue("YourValue"); // Replace with your actual value
                if (listItem != null)
                {
                    listItem.Attributes["DateOfService"] = dateOfService;
                }
            }
        }
    }
}

相关问题