Обновление панели и триггеров с повторителя управления - PullRequest
6 голосов
/ 19 апреля 2011

Привет, я нашел код, похожий на следующий онлайн.Кажется, это действительно здорово, когда кнопка, скрытая в элементе управления повторителем, запускает полный цикл обратно на сервер.

<asp:ScriptManager ID="ScriptManager1" runat="server"> 
        </asp:ScriptManager> 

        <asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
            <ContentTemplate> 
                <%=DateTime.Now.ToString() %> 
            </ContentTemplate> 
            <Triggers> 
                <asp:PostBackTrigger ControlID="HiddenButton" /> 
            </Triggers> 
        </asp:UpdatePanel> 

        <!--Make a hidden button to treat as the postback trigger--> 
        <asp:Button ID="HiddenButton" runat="server" Style="display: none" Text="HiddenButton" /> 


        <asp:Repeater ID="Repeater1" runat="server" DataSourceID="SqlDataSource1"> 
            <ItemTemplate> 
                 <!--when cick the button1, it will fire the hiddenButton--> 
                <asp:Button ID="Button1" Text="Trigger" CommandArgument='<%# Eval("Id") %>' OnClientClick="$get('HiddenButton').click();return false;" 
                    runat="server" /> 
            </ItemTemplate> 
        </asp:Repeater>

Для этого используется hiddenButton, подключив к нему событие click исходной кнопки.один.Однако моим дополнением к этому была установка CommandArgument для кнопки.Мне также нужно, чтобы он был установлен для HiddenButton.

Кто-нибудь знает, как это сделать?

Ответы [ 2 ]

12 голосов
/ 20 апреля 2012

Сначала я хотел бы объяснить Disadvantage использования Update Panel, используя тот же пример, который вы опубликовали.

Ниже приведен оригинальный код

enter image description here


Вывод

enter image description here


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

  1. Если вы захотите отправить каждый запрос на Database, используя Update Panel, а ваш GridView находится в Update Panel !!!!!!
  2. Предположимвы будете использовать ViewState данные для каждого запроса и с GridView Inside the Update Panel.

Обе вышеперечисленные методики являются худшими, насколько я понимаю.


Теперь я опишу васPage Methods

Метод страницы поверх панели обновления

Page Methods позволяет ASP.NET AJAX страницам непосредственно выполнять Page’s Static Methods, используя JSON (JavaScript Object Notation).Вместо отправки обратно, а затем receiving HTML markup для полной замены нашего UpdatePanel’s contents, мы можем использовать Web Method для запроса только интересующей нас информации.

Пример кода

enter image description here enter image description here


Вывод

enter image description here

Надеюсь, это ясно объясняет разницу в использовании.


Ответ наоригинальный запрос

Вы должны зарегистрировать событие ItemDataBound ниже Repeater и использовать для него код ниже.

Код позади

protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item || 
                           e.Item.ItemType == ListItemType.AlternatingItem)
    {
        Button btn = (Button)e.Item.FindControl("Button1");
        btn.OnClientClick = string.Format("SubmitButton('{0}');return false;"
                                                        , HiddenButton.ClientID);

    }
}

JavaScript

<script type="text/javascript">
     function SubmitButton(btn)
     {
         $("#" + btn).click(); 
     }
</script>

// Альтернатива

<script type="text/javascript">
     function SubmitButton(btn)
     {
         document.getElementById(btn).click(); 
     }
</script>

Ссылка & Здесь

0 голосов
/ 20 апреля 2012

Ваш элемент управления HiddenButton является серверным элементом управления, но вы пытаетесь получить к нему доступ в JQuery, используя его ASP.Net ID,

<asp:Button ID="Button1" Text="Trigger" CommandArgument='<%# Eval("Id") %>' OnClientClick="$get('**HiddenButton**').click();return false;" 
                runat="server" /> 

Быстрый способ исправить это - создать отдельную функцию,

<script type="text/javascript">
function SubmitButton(btn)
{
     $get("#" . btn).click(); 
}
</script>

и измените код кнопки на,

<asp:Button ID="Button1" Text="Trigger" CommandArgument='<%# Eval("Id") %>' 
                runat="server" /> 

В коде позади, в событии ItemDataBound ретранслятора, найдите кнопку и HiddenControl и установите свойство OnClientClick для Button1,

Button1.OnClientClick= string.Format("SubmitButton('{0}');return false;",HiddenButton.ClientID); 
...