Jag har en sida som innehåller 2st Usercontrols. Från båda kan man köra en postback via en button och jag vill från uc2 kunna se om en postback kommer ifrån den aktuella uc:n eller uc nummer 2 via page_Load. sender i PageLoad kommer inte att ge dig den kontrollen. Det enda sättet att kolla det, som jag kan komma på nu, är att kolla om Request.Form innehåller den ena eller den andra knappen. Det är klassisk asp..men det är det enda sättet jag kan komma på rakt upp och ner. Om din knapp heter "btn" så tror jag att följande kommer fungera. Inte helt säker dock... Har ju lite problem att översätta c# rakt upp och ner....kanske kan köra det i nån translator. Tjenare. Tycker du verkar lite fel ute. Om UC1 är beroende av UC2 tycker jag du ska implementera nån sorts Controller pattern som håller koll på de olika komponenterna Håller absolut med om att man bör göra det så. Klart snyggare att låta det hela gå genom Page objektet på det viset. Tycker väl inte att sidan behöver implementera ett interface bara för det där dock. Sen hade jag kanske funderat på ett event istället för att låta kontrollen anropa en metod på föräldern. Tycker personligen attt det separerar objekten snyggare och gör att userkontrollerna kan återanvändas på olika sidor, vilket är tanken med en userkontroll Du pratar om Event Chris, nåt bra tips om var man kan läsa på om detta i nån artikel eller så? Se : http://www.pellesoft.se/communicate/forum/view.aspx?msgid=262284&forumid=10&sum=0 Att implementera ett interface eller att använda ett event ger samma beroenden, så rent arkitektuellt spelar det ingen roll.. Magnus: "Spinn gärna vidare och kom på hur man skickar med ett värde också så blir jag också glad." Jag håller inte riktigt med på att det blir samma beroende med ett interface som med ett event i det här fallet. I detta fall vill du att sidan ska implementera ett interface och att kontrollen skall casta Page till interfacet och anropa en metod. Då kan sidan lika gärna låta bli att implementera ett interface och så castar an Page till sidans typ och anropar en metod direkt, men i vilket fall som helst så blir beroendet så att kontrollen bara kan ligga på sidor som implementerar interfacet. Om mna låter kontrollen ha ett event istället som sidan kan lyssna på så kan kontrollen användas var som helst och Pagen kan välja att lyssna på eventet eller inte. Alltså blir det inte samma beroende. Med interface blir kontrollen beroende av sidan/dess interface, med ett event så är det egentligen ingen som är beroende utan det är frivilligt att använda funktionaliteten... Magnus:Sender button
Detta borde man väl kunna åstadkomma genom att kolla sender eller nåt?Sv: Sender button
Sv: Sender button
if (Request.Form["btn"] != null)
{
// btn clicked
}
Sv: Sender button
protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack)
{
Control c = GetPostBackControl(this.Page);
if (c.GetType() == typeof(System.Web.UI.WebControls.Button))
{
// Do something
}
}
}
public static Control GetPostBackControl(Page page)
{
Control control = null;
string ctrlname = page.Request.Params.Get("__EVENTTARGET");
if (ctrlname != null && ctrlname != string.Empty)
{
control = page.FindControl(ctrlname);
}
else
{
foreach (string ctl in page.Request.Form)
{
Control c = page.FindControl(ctl);
if (c is System.Web.UI.WebControls.Button)
{
control = c;
break;
}
}
}
return control;
}
Något sånt här du tänkt dig?
Sv:Sender button
Sv: Sender button
Tex kan din Page implementera ett Interface IExampleController
sedan från UserControllern som gör postbacken gör du från postback eventet
IExampleController controller = (IExampleController)Page;
controller.UpdateSomething(this);Sv:Sender button
Sv: Sender button
Sv:Sender button
Spinn gärna vidare och kom på hur man skickar med ett värde också så blir jag också glad.Sv: Sender button
Sv: Sender button
Skicka med ett värde till ett event? Det är inget svårt, bara att skapa en egen EventHandler som ärver av EventHandler
eller menar du skicka med ett värde från en postback? Det är ingen svårt det heller. ClientScript.GetPostBackEvent eller vad metoden heter...Sv:Sender button
Sv:Sender button
Anders : "Skicka med ett värde till ett event? Det är inget svårt, bara att skapa en egen EventHandler som ärver av EventHandler"
Har du något kod exempel?Sv: Sender button
skapa ett eget eventargs
public class ValueSubmitedEventArgs : EventArgs
{
public ValueSubmitedEventArgs(string args)
{
this.Args = args;
}
public string Args
{
get;
private set;
}
}
Sedan i klassen som ska invoka eventet deklarerar du en protected metod,
protected void OnValueSubmited(object sender, ValueSubmitedEventArgs e)
{
if(ValueSubmited != null)
ValueSubmited(sender, e);
}
Detta gör man för att en klass som ärver av din klass ska kunna påverka hur eventet triggas...
Sedan skriver du såhär från det stället du vill invoka eventet
OnValueSubmited(this, new ValueSubmitedEventArgs("foo"));
edit: Chris du får läsa på lite om beroende... googla på "low coupling"...