Trápím se, trápím. Na stránce mám (pro zjednodušení) jeden asp:TextBox, který očekává jako vstup datum. K němu mám custom validátor, který vstup validuje. Funguje bez problémů. Dále mám SqlDataSource, který plní ListView. SqlDataSource má jeden selectparameter typu asp:ControlParameter, který odkazuje na onen textbox s uživatelkým vstupem, který očekává datum. Pokud zadám datum, je všechno OK. Pokud zadám prázdný řetězec, bez ohledu na nastavení parametru ConvertEmptyStringsToNull dostanu vždy prázdný řetězec (ten je validní, protože projde přes DateTime.TryParse). Dal bych přednost null, ale budiž, ošetřím to na straně databáze. Problém nastane, když je uživatelský vstup nevalidní. Mám sice i klientskou validaci, ale řeším hypotetický případ, kdy validace nefunguje kvůli vypnutému javascriptu na klientovi. V takovém případě dostanu chybu o chybné konverzi na datetime, která ovšem nastane PŘED událostí OnSelecting. Při OnLoad SqlDataSource sice už ví, že Page.IsValid je false, ale nedokážu ho zastavit v provádění selectu, protože OnLoad EventArgs nemá property Cancel (jako má SqlDataSourceSelectingEventArgs), která by mu v tom zabránila. Nějaké návrhy, jak zastavit SqlDataSource v provedení selectu, pokud je ControlParameter nevalidní?
|