Asp.Net RadioButtonList Выбранный ListItem не распознан на странице Пересмотр - PullRequest
0 голосов
/ 02 сентября 2011

На моей странице адреса доставки есть два ListItems RadioButtonList (код, показанный ниже), которые записывают в базу данных true или false на основе ввода пользователя.

Первый раз, когда пользователь выбирает значение и переходит к следующемуНа этапе оформления заказа их корабль по типу адреса правильно хранится (true / false) в базе данных.Если они вернутся на страницу адреса доставки, выберите противоположный элемент ListItem и перейдите к следующей странице оформления заказа, их обновленный тип доставки не изменится в базе данных.Как будто ListItem не распознает, что выбор радиокнопки пользователя изменился при повторном посещении страницы.

Может кто-нибудь помочь с этим разобраться?

ShippingAddress.ascx

<asp:RadioButtonList id="ShipToAddressType" runat="server">
    <asp:ListItem Value="0" id="businessShipping">My shipping address is a business.</asp:ListItem>
    <asp:ListItem Value="1" id="residenceShipping">My shipping address is a residence.</asp:ListItem>
</asp:RadioButtonList>

ShippingAddress.ascx.cs

if (residenceShipping.Selected == true)
    shippingAddress.Residence = true;
else
    shippingAddress.Residence = false;

ShippingAddress.ascx.cs Page_Load

protected void Page_Load(object sender, EventArgs e)
{
    User user = Token.Instance.User;

    Address shipAddress = null;

    foreach (Address tempAddress in user.Addresses) if (tempAddress.Nickname == "Shipping") shipAddress = tempAddress;

    // sets radio button of return users previously selected ship type
    if (shipAddress != null)
    {
        if (shipAddress.Residence == false)
        {
            ShipToAddressType.SelectedIndex = 0;
        }
        else
        {
            ShipToAddressType.SelectedIndex = 1;
        }
    }
}

1 Ответ

1 голос
/ 03 сентября 2011

Вам необходимо переместить код из Page_Load в Page_Init.В противном случае ViewState не будет работать, и вы не получите события изменения.Состояние просмотра загружается после Init до PreLoad.

Вы также должны обернуть свой код инициализации в проверку IsPostBack.Хотя я могу неправильно понять, что вы здесь делаете.

protected void Page_Init(EventArgs e)
{
    if (!IsPostBack)
    {
        User user = Token.Instance.User;

        Address shipAddress = null;

        foreach (Address tempAddress in user.Addresses)
        {
            if (tempAddress.Nickname != "Shipping")
            {
                continue;
            }
            ShipToAddressType.SelectedIndex = 1;
        }
    }
    ShipToAddressType.SelectedIndexChanged += ShipToAddressType_SelectedIndexChanged;
}

void ShipToAddressType_SelectedIndexChanged(object sender, EventArgs e)
{
    // save the new state to database

    // redirect to enforce refresh of saved state
    Response.Redirect(Request.RawUrl);
}
...