Повторитель ItemCommand не работает при ссылке на страницу
РЕДАКТИРОВАТЬ: Я нашел, что вызывает проблему, но я не знаю, почему, и я не знаю, как это исправить. Я использую JQuery Mobile для создания темы моего сайта, и когда я удаляю эту строку:
<div data-role="page" data-theme="a">
Я могу заставить ретранслятор работать правильно. Кто-нибудь знает, как я могу сохранить свою тему и заставить этот ретранслятор работать?
Хорошо, у меня есть повторитель, как это:
<asp:Repeater ID="Repeater1" runat="server" onitemcommand="Repeater1_ItemCommand" EnableViewState="true">
<ItemTemplate>
<li>
<asp:LinkButton ID="Button1" runat="server" Text='<%# Container.DataItem %>' CommandName="Redirect" />
</li>
</ItemTemplate>
</asp:Repeater>
И код позади это выглядит так
protected void Repeater1_ItemCommand(object source, RepeaterCommandEventArgs e)
{
if (e.CommandName == "Redirect")
{
Session["contact"] = ((LinkButton)e.CommandSource).Text;
Response.Redirect("Contact_Details.aspx");
}
}
И если я перейду прямо к этой странице (без ссылки на нее с другой страницы), повторитель запустит ItemCommand. Но если я перенаправлю свою страницу входа обратно на эту страницу или просто нажму на ссылку на эту страницу с другой страницы, команда item никогда не запускается при нажатии на кнопки ссылки. Любые подсказки относительно того, почему это?
РЕДАКТИРОВАТЬ: Полный код для этой страницы:
<%@ Page Title="" Language="C#" MasterPageFile="~/Site1.Master" AutoEventWireup="true" CodeBehind="Contacts.aspx.cs" Inherits="WebApplication3.Contacts" %>
<%@ MasterType VirtualPath = "~/Site1.Master" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<asp:Repeater ID="Repeater1" runat="server" onitemcommand="Repeater1_ItemCommand" EnableViewState="true">
<HeaderTemplate> <ul data-role='listview' data-theme='c' data-inset='true'>
<li data-role="list-divider"><center><h1>Contacts</h1></center></li></HeaderTemplate>
<ItemTemplate>
<li>
<asp:LinkButton ID="Button1" runat="server" Text='<%# Container.DataItem %>' CommandName="Redirect" />
</li>
</ItemTemplate>
<FooterTemplate></ul></FooterTemplate>
</asp:Repeater>
</asp:Content>
При загрузке страницы я подключаюсь к веб-сервису, который подключается к exchange и возвращает массив. Я делаю быстрое преобразование массива в массив, а остальная часть кода выглядит так:
//Converts the array grabbed from the webservice to an arraylist
ArrayList testList = ArrayList.Adapter(contactsList);
Repeater1.DataSource = testList;
Repeater1.DataBind();
Repeater1.ItemCommand += new RepeaterCommandEventHandler(Repeater1_ItemCommand);
}
1 ответ
Так что я понял, какая линия вызывает у меня проблему.
На моей главной странице у меня было:
<div data-role="page" data-theme="a">
Эта строка для моей JQuery Mobile Theme. Когда я это прокомментировал, это сломало тему, но репитер сработал. Поэтому я заглянул в документацию по JQuery Mobile и обнаружил, что могу добавить rel="external" в качестве атрибута ссылки, которая ссылается на эту страницу. Это удаляет переходы AJAX и заставляет страницу обновляться при нажатии.
Не уверен точно, почему это было проблемой, у любого гуру есть идея?