Использование Repeater для обновляемой формы - PullRequest
0 голосов
/ 25 февраля 2010

У меня есть список имен параметров, для которых я хочу, чтобы пользователь вводил некоторые значения, поэтому я делаю это:

<div>
    <asp:Repeater runat="server" ID="rptTemplateParams" EnableViewState="true">
    <HeaderTemplate>
        <ul>
    </HeaderTemplate>
    <ItemTemplate>
        <li>
            <asp:Label runat="server"><%#Container.DataItem%></asp:Label>
            <asp:TextBox runat="server" ID="textParamValue"></asp:TextBox>
        </li>
    </ItemTemplate>
    <FooterTemplate>
        </ul>
    </FooterTemplate>
    </asp:Repeater>
</div>
<asp:Button runat="server" ID="Send" Text="Send Email" OnClick="Send_Click" />

и на стороне сервера:

void Page_Load(...)
{
    rptTemplateParams.DataSource =Params;  // Params is List<string>
    rptTemplateParams.DataBind();
}



public void Send_Click(object sender, EventArgs e)
{
    ParamDict = new Dictionary<string, string>();
    foreach (RepeaterItem item in rptTemplateParams.Items)
    {
    if (item.ItemType == ListItemType.Item)
    {
        TextBox textParamValue = (TextBox)item.FindControl("textParamValue");
        if (textParamValue.Text.Trim() != String.Empty)
        {
            // IT NEVER GETS HERE - textParamValue.Text IS ALWAYS EMPTY!!!

            ParamDict.Add(item.DataItem.ToString(), textParamValue.Text);
        }
    }
    }
}

Как я добавил в комментарии, я не могу получить значения текстового поля - они всегда пусты. Я забираю их не в том месте?

Спасибо! Андрей

Ответы [ 2 ]

2 голосов
/ 25 февраля 2010

Попробуйте изменить page_load следующим образом

if(!Page.IsPostBack)
{
    rptTemplateParams.DataSource =Params;  // Params is List<string> 
    rptTemplateParams.DataBind(); 

}

Привязка данных стирает существующие элементы управления и заменяет их новыми пустыми элементами управления. Вы хотите связывать данные только при необходимости.

1 голос
/ 25 февраля 2010

попробуйте это:

void Page_Load(...)
{
    if (!IsPostBack)
    {
        rptTemplateParams.DataSource =Params;  // Params is List<string>
        rptTemplateParams.DataBind();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...