ASP.NET Динамическое управление дополнением - PullRequest
2 голосов
/ 04 февраля 2011

ОРИГИНАЛЬНЫЙ ПОЧТА

Есть тонна статей и гораздо больше вопросов, чем ответов, размещенных здесь на SO для моего конкретного вопроса.

У меня есть веб-страница, которую я создаю, которая будет иметь элемент управления DropDownList products , который пользователь может выбрать для входа в заказ для обработки. В дополнение к этому есть два (2) других элемента управления DropDownList, которые содержат опции и аксессуары для каждого конкретного продукта . Я хочу, чтобы пользователь мог вводить несколько product строк в объект order для обработки вместе с соответствующими options и / или * вспомогательными принадлежностями. Это уменьшит количество записей для хранения информации о клиентах в базе данных.

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

Должен ли я использовать что-то кроме ASP.NET для создания моей веб-страницы из-за сложности работы с ViewState? Хотя это может быть сложно, есть ли лучшая методология для использования при попытке такого курса действий?

EDIT

Таким образом, мои выводы заставляют меня поверить, что для правильного хранения данных при их добавлении я должен использовать элемент управления Repeater и DataBind, которые относятся к объекту Dictionary, содержащему мои данные в KeyValuePairs. Я ищу упрощенный способ сделать это, вместо этого просто добавить непосредственно объект, который содержит все данные, которые мне понадобятся. Я, конечно, могу добавить этот класс в Repeater и DataBind к нему, но повторное увлажнение данных обратно из Repeater вызывает у меня больше, чем несколько проблем.

public class Order
{
    public Order() { }
    public string CustomerNamer { get; set; }
    public ProductList ProductOrdered { get; set; }
}
public class ProductList : List<Product>
{
     public ProductList() { }
}
public class Product
{
     public Product() { }
     public int ID { get; set; }
     public string Name { get; set; }
     public string ProdcutCode { get; set; }
}

Код позади:

protected void order_add_Click(object sender, EventArgs e)
{
        Dictionary<int, Order> objOrders = new Dictionary<int, Order>();

        Order objOrder = new Order();
        Product objProduct = new Product();

        objProduct.Name = "Tire";
        objProduct.ProductCode = "75R15";

        objOrder.ProductsOrdered = new ProductList();

        objOrder.ProductsOrdered.Add(objProduct);

        objOrders.Add(0, objOrder);

        rptTest.DataSource = objOrders;
        rptTest.DataBind();
}

1 Ответ

0 голосов
/ 04 февраля 2011

Для динамических коллекций, представленных через Repeater на отображаемой странице, я успешно использовал этот шаблон много раз:

Создать структуру в памяти, которая может представлять информацию.

Представьте эту структуру как свойство на странице и внутренне сохраните ее в Session или ViewState в зависимости от ситуации.

public List<Order> Orders { get { return ViewState("OrdersList"); } set { ViewState("OrdersList") = value; } }

DataBind() к повторителю, и привязка преобразует ваш объект в памяти во что бы он ни выглядел при рендеринге.

На постбеке считайте любые изменения с повторителя и обновите структуру данных в памяти (в обработчике Page_Load -> if (!IsPostback) {...}).

Когда пришло время сохранить выбор в БД (или отправить заказ и т. Д.), Просто прочитайте информацию из своего хранилища в памяти.

...