Проверить, был ли дважды нажат один элемент в списке? - PullRequest
0 голосов
/ 30 ноября 2011

Можно ли проверить, был ли нажат один элемент более одного раза в списке asp? Я использую событие onSelectedIndexChanged ... но мне нужно посмотреть, был ли один и тот же элемент нажатым более одного раза. Для этого есть какое-то событие?

Ответы [ 4 ]

0 голосов
/ 30 ноября 2011

Я бы предпочел сделать эту проверку, используя JavaScript или JQuery.В конце концов, это всего лишь предупреждение.

0 голосов
/ 30 ноября 2011

Тот же ответ, что и у Адама, но с SessionState.

public List<int> previouslyClickedOptions{
    get {
       if (Session["prevClicked"] == null)
           Session["prevClicked"] = new List<int>();
       return (List<int>)Session["prevClicked"];
    }
}
0 голосов
/ 30 ноября 2011

Адам прав насчет автоматической публикации изменений. если это то, что вы уже делаете в любом случае, имеет смысл сделать такое отслеживание. однако это свойство на самом деле называется AutoPostBack, а не onSelectedIndexChanged, которое является событием, которое вы можете обработать, когда есть сообщение, указывающее, что значение элемента управления отличается от того, когда оно было первоначально отправлено.

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

это сэкономит вам пропускную способность и нагрузку на ваш сервер и будет выглядеть лучше.

0 голосов
/ 30 ноября 2011

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

До тех пор, пока данные, которые вы храните, небольшие и сериализуемые, это должно быть хорошо.

Таким образом, чтобы сохранить текущий список значений, по которому щелкнул пользователь, что-то вроде этого должно работать

public List<string> previouslyClickedOptions {
    get {
       if (ViewState["prevClicked"] == null)
           ViewState["prevClicked"] = new List<string>();
       return (List<string>)ViewState["prevClicked"];
    }
}

А в вашем SelectedIndexChanged:

string currentlySelected = myLB.SelectedValue;
bool clickedBefore = previouslyClickedOptions.Contains(currentlySelected);
if (!clickedBefore)
   previouslyClickedOptions.Add(currentlySelected);
...