Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка под ASP.NET > Отлов кнопки ascx в aspx


Автор: alexburzak 18.12.2007, 15:09
Создал два файла – aspx и ascx. То есть контрол и обыкновенная страница.
На ascx имеется кнопка с id=”MyID”

Как в файле aspx при событие Page_Load отловить, что эта кнопка нажата?
На уровне интуиции понимаю, что нужно использовать sender As Object.
Но как это сделать? Плиз помогите, как можно понять что перегруз страницы произошел, что нажата кнопка?
 smile 

Автор: tol05 18.12.2007, 15:41
Буквально вчера был похожий вопрос http://forum.vingrad.ru/forum/topic-187526/anchor-entry1351739/0.html
Я еще мучался, вроде проще можно... Но нет smile сегодня подтверждение нашел http://www.ryanfarley.com/blog/archive/2005/03/11/1886.aspx

Т.е. сначала можно попробовать через "__EVENTTARGET", но если не получится, то все равно, через ключи request-a...

Автор: Mymik 18.12.2007, 17:32
Может быть немного не в тему, но мне кажется, нужно использовать событийное программирование...
aspx файл
Код

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default6.aspx.cs" Inherits="Default6" %>
<%@ Register Src="~/test.ascx" TagName="Test" TagPrefix="cc" %>
<!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>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <%-- Подключаемый User Control --%>
        <cc:Test ID="tTest" runat="server" />
        <%-- Наш прекрасный индикатор --%>
        <asp:Label ID="lblTest" runat="server" />
    </div>
    </form>
</body>
</html>


aspx.cs
Код

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class Default6 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        /* Подключаем обработчик события */
        tTest.PressMeClick += new EventHandler(tTest_PressMeClick);
    }

    /* Сам обработчик события */
    protected void tTest_PressMeClick(object sender, EventArgs e)
    {
        lblTest.Text = "Press Me Clicked";
    }
}


ascx
Код

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="test.ascx.cs" Inherits="test" %>
<asp:Button ID="btnSubmit" OnClick="btnSubmit_Click" Text="Press Me" runat="server" />

ascx.cs
Код

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class test : System.Web.UI.UserControl
{
    /* Наше доблестное событие */
    public event EventHandler PressMeClick;

    protected void Page_Load(object sender, EventArgs e)
    {

    }

    /* Обработчик нажатия кнопки */
    protected void btnSubmit_Click(object sender, EventArgs e)
    {
        if (PressMeClick != null)
            PressMeClick(sender, e);
    }
}


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

Автор: alexburzak 18.12.2007, 20:03
Mymik Совершенное решение, спасибо.  smile 
tol05 тоже имеет право на сушествование, иногда нужно работать ссырыми даннами. спасибо.  smile

Добавлено через 50 секунд
Но кажется и через sender моно это откапать, по крайней мере дебаг так показывает.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)