Динамический выбор значения переключателя - PullRequest
1 голос
/ 08 декабря 2011
this.Controls.Add(new CheckBox{ Checked = true; })

Когда я добавляю это в page_load. Работает, добавляет флажок и виден.

Немного другой подход:

var button = new CheckBox{ Checked = true; } 
globals.button = button;
this.Controls.Add(button);

Globals - это класс со свойством checkbox, для которого я хочу установить флажок в надежде получить данные после нажатия кнопки.

public static CheckBox button { get; set; }

Однако, когда нажата кнопка, элемент управления исчез из моего экрана, и кнопка в моем классе глобальных переменных не была обновлена ​​с какими-либо изменениями, которые я внес в флажок.

Как изменить помеченное состояние флажка и узнать его текущее состояние при выполнении события button.click?

Ответы [ 2 ]

1 голос
/ 08 декабря 2011

Вы должны заново создавать динамические элементы управления на каждом постбеке, они не будут волшебным образом появляться, потому что каждый запрос является новым экземпляром класса Page.

См. Мой предыдущий постпо этому вопросу он использует пользовательский элемент управления, но идея все та же.

И еще

Необходимо добавить элемент управления до Page_Load

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

см. эту статью

Обновление

Это очень простой способ динамического добавления флажка, который сохраняет состояние / значение при нажатии кнопки.

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Test.aspx.cs" Inherits="Test" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <asp:PlaceHolder runat="server" ID="ph"></asp:PlaceHolder>
        <asp:Button OnClick="btn_Click" runat="server" ID="btn" Text="Click Me" />

        <asp:Label runat="server" ID="lbl"></asp:Label>
    </form>
</body>
</html>

Тогда код позади

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


public partial class Test : Page
{
    private CheckBox MyCheckBox { get; set; }
    protected override void CreateChildControls()
    {

        this.MyCheckBox = new CheckBox() { Checked = true };
        this.ph.Controls.Add(this.MyCheckBox);
        base.CreateChildControls();
    }

    protected void btn_Click(object sender, EventArgs e)
    {
        var someValue = this.MyCheckBox.Checked;
        this.lbl.Text = someValue ? "Checked" : "Not Checked";
    }

}
0 голосов
/ 08 декабря 2011

Если в методе Page_Load(object sender, EventArgs e) созданы динамические элементы управления, они не будут возвращать изменения, сделанные пользователем.

Причиной возникновения проблем является то, что состояние представления ASP.Net создается до вызова метода Page_Load(object sender, EventArgs e). Состояние просмотра ASP.Net содержит элементы управления на странице и их значения. Метод Page_Init(object sender, EventArgs e) вызывается до создания состояния просмотра ASP.Net. При создании элементов управления в методе Page_Init(object sender, EventArgs e) будет возвращено то, что вводит пользователь, кроме того, элементы управления нужно будет создавать, только если страница не является отправкой назад.

Если по какой-то причине вы не можете создать элементы управления в методе Page_Init(object sender, EventArgs e), вы отредактируете, чтобы изменить состояние представления ASP.Net на Page_Load(object sender, EventArgs e).

Если вам нужно создать элементы управления в методе Page_Load(object sender, EventArgs e), этот вопрос должен помочь Как сохранить переменную при обратной передаче

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