ASP.Список и фотографии - PullRequest
1 голос
/ 16 февраля 2011

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

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class _Default : System.Web.UI.Page 
{
    string[] pictures = { "~/createWii.jpg", 
                               "~/DKC4_wii.png",
                                "~/Donkey-Kong-Country-1.jpg", 
                                "~/DSCallOfDutyBlackOps.jpg", 
                                "~/DSPreviewsCodmw2.jpg", 
                                "~/DSPreviewsAliceInWonderLAnds.jpg",
                               "~/DSPreviewPicross3d.jpg",
                               "~/createii.jpg", 
                       };
string[] picturesNames = { "picture1", "picture2", "picture3", "picture4", "picture5", "picture6", "picture7", "picture8" };

protected void Page_Load(object sender, EventArgs e)
{
    for (int i = 0; i < pictures.Length; i++)
    {
            ListBox1.Items.Add(new ListItem(picturesNames[i],pictures[i]));
    }

    Image1.ImageUrl = "~/Donkey-Kong-Country-1.jpg";


    ListBox1.DataSource = picturesNames;
    ListBox1.DataBind();
}
protected void ListBox1_SelectedIndexChanged(object sender, EventArgs e)
{
    Image1.ImageUrl = pictures[ListBox1.SelectedIndex];// it tells me that there is index out of range each time. why ?
}

}

1 Ответ

2 голосов
/ 16 февраля 2011

Пара вещей.

1.) Вы должны обернуть код в page_load с помощью

if(!IsPostback)

2.) Убедитесь, что в .aspx указано свойство AutoPostbackустановите значение true в списке!

Изменить

В соответствии с запросом в комментариях причина, по которой это необходимо, в два раза.

  1. ASP.NET ViewState будет обрабатывать постоянство значений при обратной передаче, поэтому вы можете использовать условие !IsPostback, чтобы гарантировать, что информация связана только один раз.Это предотвращает появление каких-либо «странностей» в будущем.

  2. По умолчанию ListBoxes / DropDownLists / etc не отправляют сообщения автоматически, когда пользователь изменяет выбор.Таким образом, чтобы фактически вызвать событие, вам необходимо иметь кнопку, выполняющую обратную передачу, или обновить свойство «AutoPostback», как я указывал, чтобы гарантировать, что когда пользователь вносит изменения, он запускает код на стороне сервера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...