НЕ РАБОТАЕТ СОБЫТИЕ !!!
От: shinji  
Дата: 12.07.06 01:35
Оценка:
Есть контрол... 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, а вот по нажатию кнопки НИЧЕ НЕ ПАШЕТ я уже все комбинации перепробывал и тут искал ничё подобного нету . Подскажите что я тут делаю неправильно?
Re: НЕ РАБОТАЕТ СОБЫТИЕ !!!
От: shinji  
Дата: 12.07.06 04:30
Оценка:
Ребята из aspnetmania мне нужно движок сделать который модули грузит. События он пэйдж лоад отрабатывают с ними всё ОК НО события кнопки не пашут... хелп плизззз.
Re[2]: НЕ РАБОТАЕТ СОБЫТИЕ !!!
От: Аноним  
Дата: 12.07.06 05:22
Оценка:
Здравствуйте, shinji, Вы писали:

S>Ребята из aspnetmania мне нужно движок сделать который модули грузит. События он пэйдж лоад отрабатывают с ними всё ОК НО события кнопки не пашут... хелп плизззз.

Смотри на SQL.ru
http://www.sql.ru/forum/actualthread.aspx?tid=313595
Re: НЕ РАБОТАЕТ СОБЫТИЕ !!!
От: shinji  
Дата: 12.07.06 08:06
Оценка:
Ну чё вообще никто не знает ?
Re: НЕ РАБОТАЕТ СОБЫТИЕ !!!
От: cadet354 Россия
Дата: 12.07.06 08:22
Оценка:
Здравствуйте, 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>>
Re: НЕ РАБОТАЕТ СОБЫТИЕ !!!
От: Аноним  
Дата: 12.07.06 03:52
Оценка:
А зачем мучиться с плэйсхолдером?
Просто проверь наличие в QueryString элемента go со значением равным search. И если таковой имеется подставь контрол, только сделай это не в кодбихайнде, а в aspx коде.
Ну примерно вот так:

<form id="form1" runat="server">
<div>
<%if(Request.QueryString["go"]=="search"){ %>
<uc1:Search ID="Search1" runat="server" />
<%}%>
</div>
</form>
У меня заработало.

К сообщению приложен файл (см. оригинал).


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re: Re[2]: НЕ РАБОТАЕТ СОБЫТИЕ !!!
От: Аноним  
Дата: 12.07.06 05:45
Оценка:
А мне нужно динамически грузить контролы, БЕЗ ВОТ ЭТОЙ СТРОЧКИ ВРУКОПАШКУ ПРОПИСЫВАЕМОЙ НИКАК "<%@ Register Src="Search.ascx" TagName="Search" TagPrefix="uc1" %>" ?

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

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

Вообщем всё ок пашет грузится динамически ДЛЛКИ всё ОК, НО не пашет то, что я там писал сверху...


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re: Re[2]: НЕ РАБОТАЕТ СОБЫТИЕ !!!
От: Аноним  
Дата: 12.07.06 06:03
Оценка:
объяви ctrl статиком на уровне класса, иначе он при каждом постбэке перетирается


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re: Re[2]: НЕ РАБОТАЕТ СОБЫТИЕ !!!
От: Аноним  
Дата: 12.07.06 06:46
Оценка:
VovanDrобъяви ctrl статиком на уровне класса, иначе он при каждом постбэке перетирается

Пример плизз чтото не понял только в каком его месте статиком делать... ?!


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re: Re[2]: НЕ РАБОТАЕТ СОБЫТИЕ !!!
От: Аноним  
Дата: 12.07.06 07:11
Оценка:
примерно так

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);
}
}


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re: Re[2]: НЕ РАБОТАЕТ СОБЫТИЕ !!!
От: Аноним  
Дата: 12.07.06 07:47
Оценка:
Базовый контрол — тут возможно будут какието функции добавлены.
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>

К сообщению приложен файл (см. оригинал).


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re: НЕ РАБОТАЕТ СОБЫТИЕ !!!
От: Аноним  
Дата: 12.07.06 08:34
Оценка:
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");
}
}
}

Сделал так всравно ничё кажись придется всё раскидывать либо полностью самописными конитролами либо по страницам с мастерпэйджами.


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
RE: Re: Re[2]: НЕ РАБОТАЕТ СОБЫТИЕ !!!
От: Аноним  
Дата: 12.07.06 10:30
Оценка:
Вынеси вот этот код:

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

из проверки на !IsPostBack чтобы он выполнялся при каждом реквесте и все заработает.
Динамически добавляемые контролы нужно добавлять при каждом реквесте страницы
Многие вещи нам непонятны не оттого, что наши понятия слабы, а оттого, что данные вещи не входят в круг наших понятий.


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.