Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / НЕ РАБОТАЕТ СОБЫТИЕ !!! / 13 сообщений из 13, страница 1 из 1
12.07.2006, 05:35
    #33846513
shinji
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
НЕ РАБОТАЕТ СОБЫТИЕ !!!
Есть контрол... search.ascx

в веб части стоит это:


<%@ Control Language="C#" AutoEventWireup="true" CodeFile="search.ascx.cs" Inherits="Arxiv.Controls.SearchCtrl" %>
<table cellpadding="5" cellspacing="0" width="100%" border="0" style="border-collapse: collapse;">
<tr>
<td class="content">
    <asp:Button ID="BSearch" runat="server" Text="Найти" OnClick="BSearch_Click" />
</td>
</tr>
</table>


В кодбихаинде — это:

using System;



namespace Arxiv.Controls
{
    public partial class SearchCtrl : BaseControl
    {
        /// <summary>
        /// Констркутор.
        /// </summary>
        public SearchCtrl()
        {

        }

        protected void Page_Load(object sender, EventArgs e)
        {
            Response.Write("sadasdsa");
        }
        protected void BSearch_Click(object sender, EventArgs e)
        {
            Response.Redirect("asdasdsa");
        }
    }
}

Есть страница. Default.aspx
Идея такова если пишут Default.aspx?go=search то я должен загрузить этот контрол.
Вмазываю плэйсхолдер значит.

И пишу вот это:


    /// <summary>
    /// Загружает контрол.
    /// </summary>
    private void LoadMod(string ctrlname)
    {
        PH1.Controls.Clear(); // На всякий случай чистим его от всякой фигни.
        Title = "Бла бла бла..." - " + Arxiv.MainMenu.MM.GetTitle(ModKey);
        Control ctrl = LoadControl("controls\\" + ctrlname + ".ascx");
        ctrl.ID = "dctrl";
        PH1.Controls.Add(ctrl);
    }

Срабатывает у контрола событие Page_Load, а вот по нажатию кнопки НИЧЕ НЕ ПАШЕТ я уже все комбинации перепробывал и тут искал ничё подобного нету :(. Подскажите что я тут делаю неправильно?
...
Рейтинг: 0 / 0
12.07.2006, 07:52
    #33846557
Alex Kuznetsov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
НЕ РАБОТАЕТ СОБЫТИЕ !!!
А зачем мучиться с плэйсхолдером?
Просто проверь наличие в QueryString элемента go со значением равным search. И если таковой имеется подставь контрол, только сделай это не в кодбихайнде, а в aspx коде.
Ну примерно вот так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
    <form id="form1" runat="server">
    <div>
    <%if(Request.QueryString["go"]=="search"){ %>
        <uc1:Search ID="Search1" runat="server" />
    <%}%>
    </div>
    </form>
У меня заработало.
...
Рейтинг: 0 / 0
12.07.2006, 08:30
    #33846606
shinji
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
НЕ РАБОТАЕТ СОБЫТИЕ !!!
Ребята из aspnetmania мне нужно движок сделать который модули грузит. События он пэйдж лоад отрабатывают с ними всё ОК НО события кнопки не пашут... хелп плизззз.
...
Рейтинг: 0 / 0
12.07.2006, 09:22
    #33846709
Аноним
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
НЕ РАБОТАЕТ СОБЫТИЕ !!!
Здравствуйте, shinji, Вы писали:

S>Ребята из aspnetmania мне нужно движок сделать который модули грузит. События он пэйдж лоад отрабатывают с ними всё ОК НО события кнопки не пашут... хелп плизззз.
Смотри на SQL.ru
http://www.sql.ru/forum/actualthread.aspx?tid=313595
...
Рейтинг: 0 / 0
12.07.2006, 09:45
    #33846765
shinji
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
НЕ РАБОТАЕТ СОБЫТИЕ !!!
А мне нужно динамически грузить контролы, БЕЗ ВОТ ЭТОЙ СТРОЧКИ ВРУКОПАШКУ ПРОПИСЫВАЕМОЙ НИКАК "<%@ Register Src="Search.ascx" TagName="Search" TagPrefix="uc1" %>" ?

Я написал модуль как интерфейс IMod... у него 3 поля есть.

string pagetitle;
string pagekey; - Default.aspx?go=pagekey
UserControl ctl;

Вообщем всё ок пашет грузится динамически ДЛЛКИ всё ОК, НО не пашет то, что я там писал сверху...
...
Рейтинг: 0 / 0
12.07.2006, 10:03
    #33846827
VovanDr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
НЕ РАБОТАЕТ СОБЫТИЕ !!!
объяви ctrl статиком на уровне класса, иначе он при каждом постбэке перетирается
...
Рейтинг: 0 / 0
12.07.2006, 10:46
    #33847018
shinji
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
НЕ РАБОТАЕТ СОБЫТИЕ !!!
VovanDrобъяви ctrl статиком на уровне класса, иначе он при каждом постбэке перетирается

Пример плизз чтото не понял только в каком его месте статиком делать... ?!
...
Рейтинг: 0 / 0
12.07.2006, 11:11
    #33847124
VovanDr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
НЕ РАБОТАЕТ СОБЫТИЕ !!!
примерно так

public class myPage: System.Web.UI.Page
{
         static private System.Web.UI.Control CONTROL; 
         private void Page_Load(object sender, System.EventArgs e)
        {
           if(CONTROL==null)
                CONTROL=(Control)LoadControl(controlName + ".ascx");
          this.Controls.Add (CONTROL);     
        }
 }
...
Рейтинг: 0 / 0
12.07.2006, 11:47
    #33847331
shinji
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
НЕ РАБОТАЕТ СОБЫТИЕ !!!
Базовый контрол - тут возможно будут какието функции добавлены.
using System;
using System.Data;

namespace Arxiv.Controls
{
/// <summary>
/// Базовый контрол.
/// </summary>
public class BaseControl : System.Web.UI.UserControl
{

}
}

Базовая страница - вставлены только функции которые плохо работают (много удалил лишнего).

namespace Arxiv.Pages
{
public class BasePage : System.Web.UI.Page
{
private static BaseControl ctrl;

/// <summary>
/// Загружает модуль.
/// </summary>
/// <param name="container">Контейнер.</param>
/// <param name="ctrlname">Название модуля.</param>
public void LoadMod(PlaceHolder container, string ctrlname)
{
ctrl = (BaseControl)LoadControl("~/controls/" + ctrlname + ".ascx");
container.Controls.Add(ctrl);
this.Title = "Архив документов ОАО КБ \"Искра\" - " + Arxiv.MainMenu.MM.GetTitle(this.ModKey);
}
}

Рабочая страница.

using System;
using Arxiv.Pages;
using System.Web.UI;
using Arxiv.Controls;
using Arxiv.Sessions;

public partial class MainPage : BasePage
{
/// <summary>
/// Событие при загрузке формы.
/// </summary>
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
if (!ASessions.Pass)
Response.Redirect("Login.aspx", true);

switch (ModKey)
{
case "search":
LoadMod(PH1, "search");
break;
case "adddoc":
LoadMod(PH1, "adddoc");
break;
default:
Response.Redirect("Default.aspx?go=" + DefMod, true);
break;
}
}
}
}

Кодбехаинд и веб часть контрола.
using System;

namespace Arxiv.Controls
{
public partial class Search : BaseControl
{
protected void Page_Load(object sender, EventArgs e)
{
Response.Write("asdasdsadsadwqfwqfqw");
}
protected void Button1_Click(object sender, EventArgs e)
{
Response.Write("asdasdsadsadwqfwqfqw");
}
}
}

Веб часть:
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="search.ascx.cs" Inherits="Arxiv.Controls.Search" %>
<asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />

Веб часть страницы Default.aspx на которой всё грузится.
автор<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="MainPage" MasterPageFile="Default.master" %>
<asp:Content ContentPlaceHolderID="MainContainer" ID="MC" runat="server">
<asp:PlaceHolder ID="PH1" runat="server">
</asp:PlaceHolder>
</asp:Content>
...
Рейтинг: 0 / 0
12.07.2006, 12:06
    #33847446
shinji
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
НЕ РАБОТАЕТ СОБЫТИЕ !!!
Ну чё вообще никто не знает ? :(
...
Рейтинг: 0 / 0
12.07.2006, 12:22
    #33847535
cadet354
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
НЕ РАБОТАЕТ СОБЫТИЕ !!!
Здравствуйте, shinji, Вы писали:



S>Есть страница. Default.aspx
S>Идея такова если пишут Default.aspx?go=search то я должен загрузить этот контрол.
S>Вмазываю плэйсхолдер значит.
на какой стадии в странице ты "вмазываешь"?
S>И пишу вот это:

S>
S>    /// <summary>
S>    /// Загружает контрол.
S>    /// </summary>
S>    private void LoadMod(string ctrlname)
S>    {
S>        PH1.Controls.Clear(); // На всякий случай чистим его от всякой фигни.
S>        Title = "Бла бла бла..." - " + Arxiv.MainMenu.MM.GetTitle(ModKey);
S>        Control ctrl = LoadControl("controls\\" + ctrlname + ".ascx");
S>        ctrl.ID = "dctrl";
S>        PH1.Controls.Add(ctrl);
S>    }
S>
скорее всего на стадии page_load, тогда надо еще обработчик свой вручную подписать...
ctrl.Click+=new System.EventHandler(this.ctrl_Click)
S>Срабатывает у контрола событие Page_Load, а вот по нажатию кнопки НИЧЕ НЕ ПАШЕТ я уже все комбинации перепробывал и тут искал ничё подобного нету :(. Подскажите что я тут делаю неправильно?
вообщем, надо поискать по следующим keywords:"Add dynamic contols"... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
...
Рейтинг: 0 / 0
12.07.2006, 12:34
    #33847585
shinji
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
НЕ РАБОТАЕТ СОБЫТИЕ !!!
using System;

namespace Arxiv.Controls
{
public partial class Search : BaseControl
{
protected void Page_Init(object sender, EventArgs e)
{
Button1.Click += new EventHandler(Button1_Click);
Response.Write("asdasdsadsadwqfwqfqw");
}
protected void Page_Load(object sender, EventArgs e)
{

}
protected void Button1_Click(object sender, EventArgs e)
{
Response.Write("213213123213");
}
}
}

Сделал так всравно ничё :( кажись придется всё раскидывать либо полностью самописными конитролами либо по страницам с мастерпэйджами.
...
Рейтинг: 0 / 0
12.07.2006, 14:30
    #33848152
Dimon aka Manowar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
НЕ РАБОТАЕТ СОБЫТИЕ !!!
Вынеси вот этот код:

switch (ModKey) 

  case "search": 
    LoadMod(PH1, "search"); 
    break; 
  case "adddoc": 
    LoadMod(PH1, "adddoc"); 
    break; 
  default: 
    Response.Redirect("Default.aspx?go=" + DefMod, true); 
    break; 


из проверки на !IsPostBack чтобы он выполнялся при каждом реквесте и все заработает.
Динамически добавляемые контролы нужно добавлять при каждом реквесте страницы

Многие вещи нам непонятны не оттого, что наши понятия слабы, а оттого, что данные вещи не входят в круг наших понятий.
...
Рейтинг: 0 / 0
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / НЕ РАБОТАЕТ СОБЫТИЕ !!! / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]