Nano Hash - криптовалюты, майнинг, программирование

Как взаимодействовать между пользовательскими элементами управления в Asp.Net

У меня 5 файлов.

  1. Default.aspx
  2. Search.ascx
  3. SearchSQL.ascx
  4. Grid.ascx
  5. GridSQL.ascx

Я зарегистрировал файлы ascx на странице default.aspx и использую свойства для отображения элементов управления на странице по умолчанию. И это прекрасно работает.

Моя проблема в том, как отправить данные обратно и четверть между разными страницами ascx? Если я зарегистрируюсь на любом из них, мне будет выдана ошибка ссылки на Циркулярный файл.

Используя общедоступные свойства, у меня есть Search.ascx, зарегистрированный в GridSQL.ascx для передачи параметров поиска в строку Gridsql, а затем GridSQL.ascx в файле Grid.ascx для передачи строки sql в привязку данных сетки.

Должен быть гораздо более простой способ передачи данных НАЗАД и ЧЕТВЕРТУ между страницами, или я ошибаюсь? Когда вы пытаетесь зарегистрироваться на другой странице, чтобы передать данные обратно на страницу, которая их отправила, вы получаете ошибку циклической ссылки на файл. Я слышал несколько резолюций, таких как изменение файловой структуры, которые я пробовал, а также о пакетном режиме, но это убивает производительность. Поверьте, я потратил дни, пытаясь найти решение по этому поводу. Я собирался прокомментировать некоторые вопросы, но Стек не позволяет мне, пока у меня не будет 50 представителей.

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

31.10.2014


Ответы:


1

Правильный способ - вы хотите передать событие дочернего элемента управления родительскому.

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

Примечание. Вот демонстрация. Возможно, вы захотите переименовать делегаты и методы, которые имеют смысл для вашего сценария.

Поиск (пользовательский элемент управления, запускающий событие)

<%@ Control Language="C#" AutoEventWireup="true" 
    CodeBehind="Search.ascx.cs" Inherits="DemoWebForm.Search" %>
<asp:TextBox runat="server" ID="SearchTextBox" />
<asp:Button runat="server" ID="SearchButton" 
    Text="Search" OnClick="SearchButton_Click" />

public delegate void MessageHandler(string searchText);

public partial class Search : System.Web.UI.UserControl
{
    public event MessageHandler SearchText;

    protected void SearchButton_Click(object sender, EventArgs e)
    {
        SearchText(SearchTextBox.Text);
    }
}

GridSql (пользовательский элемент управления)

Наконец, GridSql.ascx получает текст для поиска.

<%@ Control Language="C#" AutoEventWireup="true" 
    CodeBehind="GridSql.ascx.cs" Inherits="DemoWebForm.GridSql" %>
<asp:Label runat="server" ID="SearchTextLabel"/>

public partial class GridSql : System.Web.UI.UserControl
{
    public void SearchTextMethod(string searchText)
    {
        SearchTextLabel.Text = searchText;
    }
}

Родитель

<%@ Page Language="C#" AutoEventWireup="true" 
    CodeBehind="Parent.aspx.cs" Inherits="DemoWebForm.Parent" %>

<%@ Register src="~/Search.ascx" tagname="Search" tagprefix="uc1" %>
<%@ Register src="~/GridSql.ascx" tagname="GridSql" tagprefix="uc2" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <uc1:Search ID="Search1" runat="server" />
        <uc2:GridSql ID="GridSql1" runat="server" />
    </form>
</body>
</html>

public partial class Parent : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        Search1.SearchText += m => GridSql1.SearchTextMethod(m);
    }
}
31.10.2014
  • Большое Вам спасибо. Кто-то также просто рекомендовал передать данные в строку запроса, а затем прочитать их на страницах управления. Это тоже допустимый вариант (очевидно, небольшой объем и не конфиденциальные данные)? Он говорит, что если они обновятся, они все равно будут отображать те же данные. 31.10.2014
  • строка запроса предназначена для перехода с одной страницы на другую. Это не лучший подход для вашего сценария, потому что вам нужно перезагрузить всю страницу, чтобы элемент управления получил сообщение от другого элемента управления. 31.10.2014
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..