Správičky 2 270 Blogy 577 Fórum 14 074

Prehľad diskusie

photo
CompareValidator v ScriptControle
.
2. 2. 2012 12:32:03
photo
RE: CompareValidator v ScriptControle
T
2. 2. 2012 13:23:16
photo
RE: CompareValidator v ScriptControle
T
2. 2. 2012 13:35:23
photo
RE: CompareValidator v ScriptControle
.
2. 2. 2012 15:06:07
photo
RE: CompareValidator v ScriptControle
.
2. 2. 2012 15:11:38
photo
RE: CompareValidator v ScriptControle
T
2. 2. 2012 15:32:18
photo
RE: CompareValidator v ScriptControle
.
2. 2. 2012 15:53:02
photo
RE: CompareValidator v ScriptControle
T
2. 2. 2012 16:01:45
photo
RE: CompareValidator v ScriptControle
T
2. 2. 2012 17:33:22
photo
RE: CompareValidator v ScriptControle
.
3. 2. 2012 10:49:52
photo
RE: CompareValidator v ScriptControle
T
5. 2. 2012 22:26:15
photo
RE: CompareValidator v ScriptControle
.
6. 2. 2012 8:27:57

CompareValidator v ScriptControle

photo
.
2. 2. 2012 12:32:03
Body: 1150
Najaktívnejší č.: 22

CompareValidator v ScriptControle

Caute,

   v projekte mam pouzite datumove kontroly dediace z ScriptControlu (dedi z WebControlu) a IPostBackDataHandler a potrebujem do nich pridat validaciu typu pre jeden konkretny input.

   Myslel som ze pouzijem jednoducho CompareValidator (operator DataTypeCheck) aby som nemusel riesit validaciu na klientskej strane generovanim regexov (kvoli podpore formatov pre jednotlive kultury). Bohuzial mi tato kombinacia nefunguje, validatory (resp. tag Span obsahujuci vnutri ErrorText) sa vzdy vyrendruju do stranky aj ked by sa nemali.

   Problem je asi ze nemam pouzite priamo serverovske kontroly (textbox s runat="server" ) a preto sa nevie k validovanej hodnote Validator dostat (input nema 'serverovske' id). Serverovske kontroly nemozem pouzit, pretoze kontrol samotny je generovany v overridnutej metode RenderContents(HtmlTextWriter writer) a jednoducho sa rendruje ako input... Neriesili ste nieco podobne? Implementovat vlastnu validaciu by som nechcel, kvoli dovodom uvedenym na zaciatku...

P.S: Nemienim to menit ani za ine (ajaxove) kalendare, kvoli istej funkcnosti + max. podporovana verzia .Net frameworku je 3.5...

[Reakcia]

photo
T
2. 2. 2012 13:23:16
Body: 16735
Najaktívnejší č.: 2

RE: CompareValidator v ScriptControle

@dot:

sorry, neviem sa rychlo zorientovat v tom vsetkom co si napisal(neviem si urobit uplny obraz o tom, ako to riesis, pripradne daj nejaky light sample). Tak len nejake hinty.

ano, riesili, cez vlastnu validaciu(resp. vsetky controly maju v sebe validatory). Idcko server controlov si passnut na klienta, pripadne zmenis clientId mod.

Ak nastavis ErrorMessage a nie Text na validatore, tak by sa nemal zobrazovat v spane.

Ak nechces pisat vlastne validatory mozes sa pokusit reusenut js validacne api asp.net, ktore je relativne jednoduche.

 

Tomáš Zeman, MCSD.NET, MCPD

[Reakcia]

photo
T
2. 2. 2012 13:35:23
Body: 16735
Najaktívnejší č.: 2

RE: CompareValidator v ScriptControle

jo a este mozes display=none na validatore

Tomáš Zeman, MCSD.NET, MCPD

[Reakcia]

photo
.
2. 2. 2012 15:06:07
Body: 1150
Najaktívnejší č.: 22

RE: CompareValidator v ScriptControle

@T:

Tu je cast kodu:

    //usings, namespace...

    public class TestDatePicker : ScriptControl, IPostBackDataHandler
    {
	//konstruktor, premenne, properties, ...

        [atributy...]
        public DateTime? SelectedDate
        {
            get
            {
                return (DateTime?)this.ViewState["SelectedDate"];
            }
            set
            {
                this.ViewState["SelectedDate"] = value;
            }
        }

        private string ValueClientID
        {
            get
            {
                if (this.valueClientId == null)
                {
                    this.valueClientId = this.ClientID + "_Value";
                }

                return this.valueClientId;
            }
        }

	//dalsie metody...

        protected override void RenderContents(HtmlTextWriter writer)
        {
            //if (writer == null) ...

            writer.AddAttribute(HtmlTextWriterAttribute.Id, this.ValueClientID);
            writer.AddAttribute(HtmlTextWriterAttribute.Name, this.UniqueID);
            writer.AddAttribute(HtmlTextWriterAttribute.Class, "/*class...*/");
            writer.AddAttribute(HtmlTextWriterAttribute.Type, "text");

            //...

            writer.RenderBeginTag(HtmlTextWriterTag.Input);
            writer.RenderEndTag();

            writer.AddAttribute(HtmlTextWriterAttribute.Id, this.ButtonClientID);
            writer.AddAttribute(HtmlTextWriterAttribute.Class, "/*class...*/");

            writer.RenderBeginTag(HtmlTextWriterTag.Span);
            writer.RenderEndTag();

	    //neviem ci tu mozem nejako pridat CompareValidator validujuci input pridany vyssie (s id this.ValueClientID)...
 	    //skusil som toto, ale vzdy sa to zobrazi uz ako Error Message (ako keby prebehla validacia a obsah inputu bol zly, aj ked nic nezadam):

            CompareValidator cv = new CompareValidator();
            cv.Type = ValidationDataType.Date;
            cv.ID = "testDatePickerValidator";
            cv.Operator = ValidationCompareOperator.DataTypeCheck;
            cv.ErrorMessage = "Incorrect date!";
            cv.ControlToValidate = this.UniqueID; //problem je co dat sem, aby to ukazovalo na spravny kontrol. Kdesi som cital ze UniqueId, ale nejde mi to ani s tym
            cv.RenderControl(writer);
        }        
    }

 

  • Idcko server controlov si passnut na klienta - nemam preco, validator pridavam v kode, okrem toho validator ocakava serverove id, nie ClientId
  • pripadne zmenis clientId mod - ak sa nemylim toto je az v asp .net 4.0
  • ErrorMessage som nastavoval, nie Text
  • pozeral som aj validaciu asp.net v IlSpy, zatial nic zaujimave som nenasiel. Este skusim. Idealne by bolo prepouzit js co generuje asp v zavislosti na culture...
  • display none nepomohol, to mi len skryje cely validator

Ale vdaka za tipy.

 

 

[Reakcia]

photo
.
2. 2. 2012 15:11:38
Body: 1150
Najaktívnejší č.: 22

RE: CompareValidator v ScriptControle

@T:

...ano, riesili, cez vlastnu validaciu(resp. vsetky controly maju v sebe validatory...

To ste implementovali v kontroloch IValidator (http://msdn.microsoft.com/en-us/library/system.web.ui.ivalidator.aspx)? Lebo to riesi iba serverovsku cast ak sa nemylim. Alebo ste tam priamo pridali validatory?

 

[Reakcia]

photo
T
2. 2. 2012 15:32:18
Body: 16735
Najaktívnejší č.: 2

RE: CompareValidator v ScriptControle

@dot:

mame uplne vlasne control interfaces, vlastne js api (ina filozofia controlov ako asp.net, ina filozofia validacii a ina filozofia bindingu)

public class DateInput : InputBase<DateTime?>, IRequiredValidatableControl, IRangeValidatableControl<DateTime?>

{     ...

}

kde

public abstract class InputBase<T>
        : CompositeControl, IBindableControl, IBindableControl<T>

Ak si ale spominam, mali sme implementaciu urobenu volakedy tak, ze sme vyuzivali existujuce validatory v ramci composite controlu. Nevylucuje sa do s custom dorenderovavanim aj ked na to nevidim dovod, ved existuju ASP.NET wrappre aj na html controly.

Idem pozriet na ten post predtym

Tomáš Zeman, MCSD.NET, MCPD

[Reakcia]

photo
.
2. 2. 2012 15:53:02
Body: 1150
Najaktívnejší č.: 22

RE: CompareValidator v ScriptControle

Takze pomohol workaround, obisiel som to zatial pouzitim validatorov v kontrole o uroven vyssie a pridanim atributu ValidationProperty. Cize take cosi:

[ValidationProperty("SelectedDate")]
public class TestDatePicker : ScriptControl, IPostBackDataHandler

A neriesim dyn. pridavanie validatora priamo v RenderContents v kontrole. Nie je to sice to co som povodne chcel, ale kedze cas je obmedzeny... ak by som sa k tomu niekedy dostal, a rozbehal to dam vediet.

@T:

   Zaujimavy pristup. Mas k tomu nejake odkazy cim ste sa inspirovali ci ste si to sami navrhovali?
 

[Reakcia]

photo
T
2. 2. 2012 16:01:45
Body: 16735
Najaktívnejší č.: 2

RE: CompareValidator v ScriptControle

@dot:

urob si composite control. Pridaj input a pridaj validator normalne do control structure v inite.(size hento nieco vyrenderuje ale nemoze Ti korektne fungovat) Ak chces mat inu display value ako value, tak ...Na uchovanie hodnoty pouzi textbox a nastav mu stylom display none, lebo na server side hidden inpute ti uzite validator nazafunguje(toto je improvizacia, skus, ale malo by to ist, my sme mali vlastne validacne js api). Do control structure pridaj aj validator a validuj ten textbox.

Daj mi mail, poslem Ti nieco konkretnejsie na inspiraciu ak chces.

Ano client mode az 4.0... pozri si toto: http://blog.aspnet.sk/tomas/archive/2009/01/26/ako-na-client-id-vo-webformach.aspx

 

 

 

Tomáš Zeman, MCSD.NET, MCPD

[Reakcia]

photo
T
2. 2. 2012 17:33:22
Body: 16735
Najaktívnejší č.: 2

RE: CompareValidator v ScriptControle

@dot:

validationProperty je dobre/rychle riesenie IMHO a bez dynamickeho pridavania validatory, to som odporucal aj ja v predchadzajucom poste (v najhorsom mu mozes setovat visible false ak potrebujes dynamiku a vtedy sa Ti nevyrenderuje)

ten pristup sa nejako vyprofiloval pocas rokov prace s web apps(nielen asp.net). V zjednodusenej podobe som to aplikoval aj v PHP.ASP fmwk, to je tam asi najzasadnejsia zmena oproti ASP.NET (https://github.com/tomaszeman/ASPPHP/wiki/ASPPHP-Home).

Cele je to o tom, aby boli formulare co najviac deklarativne a aby to bol naozaj RAD a aby sa eliminovala chybovost. Riesit klasicky pre kazdy input datove konverzie, navazovanie niekolkych validatorov je na ritualnu samovrazdu a nemat pouzitelny 2 way bidning detto :-)

Tomáš Zeman, MCSD.NET, MCPD

[Reakcia]

photo
.
3. 2. 2012 10:49:52
Body: 1150
Najaktívnejší č.: 22

RE: CompareValidator v ScriptControle

@T:

Vdaka za reakcie a tipy. Mail som Ti poslal.

[Reakcia]

photo
T
5. 2. 2012 22:26:15
Body: 16735
Najaktívnejší č.: 2

RE: CompareValidator v ScriptControle

uff nic mi nedoslo :-(

Tomáš Zeman, MCSD.NET, MCPD

[Reakcia]

photo
.
6. 2. 2012 8:27:57
Body: 1150
Najaktívnejší č.: 22

RE: CompareValidator v ScriptControle

Tak 2. pokus z ineho mailu...

[Reakcia]



Najaktívnejší užívatelia
1. 35110 b. photo vlko
2. 16735 b. photo T
3. 15560 b. photo spigi
4. 6635 b. photo dudok
5. 5705 b. photo slavof
6. 5205 b. photo siro
7. 4745 b. photo duracellko
8. 3780 b. photo Liero
9. 3690 b. photo lubolacko
10. 3625 b. photo jakub