Nefungující ItemInserted, ItemUpdated   zodpovězená otázka

ASP.NET WebForms

Nemůžu přijít na to, jak přesměrovat stránku po vyplnění nebo editaci FormView pomocí ItemInserted nebo ItemUpdated. V čem může být problém ? Podle zdejších tutoriálů a článků by to přece mělo fungovat. Ten úplně strohý kód vypadá takhle.

protected void FormView1_ItemInserted(object sender, System.Web.UI.WebControls.FormViewInsertedEventArgs e)
    {
        Response.Redirect("nejakaJinaStranka.aspx");
    }

protected void FormView1_ItemIpdated(object sender, System.Web.UI.WebControls.FormViewUpdatedEventArgs e)
    {
        Response.Redirect("nejakaJinaStranka.aspx");
    }

Stane se jen to, že se do databáze uloží nové hodnoty, není vyhozena žádná výjimka, vše v pořádku, jinak ale zůstane zobrazena stále stejná stránka.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Dobrý den, máte ověřeno že se ty události spouštějí? Příjde mi totiž že tam chybí handler, takže principielně to máte dobře ale ty procedury nemá co spouštět (ale možná plácám nesmysly, to co řikám je pro VB v C# pracovat neumím).

Zkuste za parametry procedury přidat Handles FormView1.ItemInserted resp. Handles FormView1.ItemUpdated

Celé by to tedy mohlo vypadat takto:

protected void FormView1_ItemInserted(object sender, System.Web.UI.WebControls.FormViewInsertedEventArgs e) Handles FormView1.ItemInserted 
    {
        Response.Redirect("nejakaJinaStranka.aspx");
    }

protected void FormView1_ItemUpdated(object sender, System.Web.UI.WebControls.FormViewUpdatedEventArgs e) Handles FormView1.ItemUpdated
    {
        Response.Redirect("nejakaJinaStranka.aspx");
    }

nahlásit spamnahlásit spam 0 odpovědětodpovědět

I když v C# nepracuji, tak vím že HANDLES klauzule je v C# BLBOST. V C# se to musí dělat v metodě InitalizeComponent()

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Jedná se o ASP.NET, kde žádné InitalizeComponent() není. Obsluha události se přiřazuje v ASPX:

<asp:FormView ID="FormView1" runat="server"  
  oniteminserted="FormView1_ItemInserted"
  onitemupdated="FormView1_ItemUpdated" ...

Dále je v obsluze událostí obvyklá chyba, kdy se ignoruje parametr e, ve kterém je uložená informace, zda se operace podařila. Takto se případná chyba "sežere" a stránka se přesměruje.

Správně má být:

protected void FormView1_ItemInserted(object sender, FormViewInsertedEventArgs e)
{
  if (e.Exception == null)
  {
    Response.Redirect("nejakaJinaStranka.aspx");
  }
}

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Děkuji, to přiřazení ve FormView jsem nějak přehlédl.

Už všechno funguje.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Ono by se ještě mělo správně kontrolovat příznak ExceptionHandled, pokud výjimka byla.

Správná podmínka tedy ve skutečnosti je tato:

if ((e.Exception == null) || (e.ExceptionHandled))
{
   // ...
}

Nikde totiž neníž řečeno, že handlerů na události bude víc a že předchozí mohl výjimku detekovat, zpracovat a říct, že chce pokračovat v dalším zpracování.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Jé promiňte, nevšiml jsem si že je to v ASP.NET (jsem já ale slepej, že? :-D)

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback