C# Пользовательский элемент управления ASP.NET, Как обработать отделение, нажимают сторону сервера?

Drupal хорош для начала работы, но Вы проводите больше времени, 'отменяя', чем фактическое добивание цели. Это изменялось особенно с выпуском Drupal 6, и быть справедливым это более очевидно во внесенных модулях.

Руководящие миграции являются также проблемой, как сказал Sean. Я все еще не знаю о хорошем методе перемещения изменений от dev сайта до живого.

я не уверен, что существует что-либо, что я изменил бы в текущем ядре, и большинство дефицитов работается на. Работа потребностей управления изображением, администраторский интерфейс по умолчанию немного нарушен, делая более сложные разметки, не получая представления/панели, и т.д. включенный мог использовать некоторую работу.

6
задан Martijn 24 September 2009 в 09:47
поделиться

2 ответа

Во-первых, вам нужно определить событие на вашем UserControl , которое позволяет Page , содержащему UserControl регистрировать и обрабатывать событие. Например:

public partial class MyUserControl : System.Web.UI.UserControl
{    
    // Event for page to handle
    public event EventHandler DivClicked;

    protected virtual void OnDivClicked(EventArgs e)
    {
        if (DivClicked != null)
            DivClicked(this, e);
    }        

    protected void Page_Load(object sender, EventArgs e)
    {
        // Page Load Code goes here
    }
}

Примечание: Следующая часть была бы проще, если бы вы использовали элемент управления, поддерживающий обратную передачу. Однако, поскольку вы хотите использовать div , я объясню, как заставить div выполнять обратную передачу. Я хотел бы поблагодарить Мэтью Нолтона за это решение.

Итак, в методе Page_Load элемента UserControl вам нужно добавить onClick для вызова функции JavaScript __ doPostback () ASP.NET, которая вызывает сервер обратно для вашего div . Это то, что дает div возможность обратной передачи на сервер. Кроме того, чтобы определить, какой элемент управления вызвал обратную передачу, я предоставил div ClientId вместе с некоторыми символами, чтобы отличить мою обратную передачу от других элементов управления. Помните, когда вы определяли div в. ascx, ему должен быть назначен id и установлен runat = "server" , чтобы он был доступен на стороне сервера.

Хорошо, теперь, добавив атрибут onclick к div , он будет выполнять обратную передачу на сервер при каждом нажатии. Итак, когда обратная передача вызывает вызов Page_Load , я проверяю, не вызвал ли обратную передачу div . Если да, то я вызываю событие UserControl DivClicked , которое будет обработано страницей.

public partial class MyUserControl : System.Web.UI.UserControl
{
    // Event Definition and Raising methods
    ...

   protected void Page_Load(object sender, EventArgs e)
   {
       // @@@@ will denote this is an argument I provided.
       string arg = "@@@@" + divClickableDiv.ClientID;
       // Add postback method to onClick 
       divClickableDiv.Attributes.Add("onClick", 
       Page.ClientScript.GetPostBackEventReference(divClickableDiv, arg));

       if (IsPostBack)
       {
           // Get event arguments for post back.
           string eventArg = Request["__EVENTARGUMENT"];

           // Determine if postback is a custom postback added by me.
           if (!string.IsNullOrEmpty(eventArg) && eventArg.StartsWith("@@@@"))
           {
               // Raise the click event for this UserControl if the div
               // caused the post back.
               if (eventArg == arg) 
                   OnDivClicked(EventArgs.Empty);
            }
        }
    }
}

Это должно сделать это для UserControl , теперь все, что вам нужно. необходимо зарегистрироваться для события DivClicked на странице.

К сожалению, вы не получите поддержки во время разработки для регистрации на событие. Однако вы все равно можете добавить код на страницу ASPX. На странице, куда вы помещаете свой UserControl , добавьте атрибут к UserControl под названием OnXXX , где XXX - это событие имени. Итак, для моего примера выше я бы определил свой UserControl на странице, который будет выглядеть так:

<uc1:MyUserControl  ID="MyUserControl1" runat="server" OnDivClicked="MyUserControl1_DivClicked" />

Теперь вы добавляете свой код обработчика в файл выделенного кода страницы Page (при условии, что ваш используя выделенный код) следующим образом:

public partial class MyPage : System.Web.UI.Page 
{
    // Called whenever div in MyUserControl is clicked.
    protected void WebUserControl1_DivClicked(object sender, EventArgs e)
    {
        // Handle Div click event here.
    }
}

Это должно сработать. Надеюсь, этот пост вам поможет.

9
ответ дан 10 December 2019 в 00:41
поделиться
<div runat="server" onserverclick="MyClickHandler">
...
</div>
1
ответ дан 10 December 2019 в 00:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: