Groups | Blog | Home
all groups > asp.net building controls > august 2007 >

asp.net building controls : can't get evaluationfunction attribute set correctly on CustomValidator



TS
8/3/2007 3:14:54 PM
i want to specify evalutionfunction for my custom validator control. i have
tried many ways to get this to work, but in the end, the evaluationfunction
attribute always gets rendered as the default
"CustomValidatorEvaluateFunction":

<span
id="ctl00_ctl00_ContentMainPlaceHolder_ApplicationContentMainPlaceHolder_cbC
lientSigned" evaluationfunction="CustomValidatorEvaluateFunction"
requiredfield="false" validatewhenempty="false" label="" validationGroup1
mustBeChecked="true" style="color:Red;display:none;"></span>

protected override void AddAttributesToRender(HtmlTextWriter writer){
base.AddAttributesToRender(writer); string x;
//this.ClientValidationFunction = "CheckBoxValidatorEvaluateIsValid";
//writer.AddAttribute("evaluationfunction",
"CheckBoxValidatorEvaluateIsValid", false);
Attributes.Add("evaluationfunction", "CheckBoxValidatorEvaluateIsValid");
writer.AddAttribute("mustBeChecked", MustBeChecked ? "true" : "false",
false);
}

how do i do this correctly? I have tried to also not override
AddAttributesToRender and instead in prerender just add these 2 attributes.
No matter what i do, evaluationfunction gets overwritten somewhere

what can i do?

TS
8/3/2007 3:38:28 PM
i found out that this is in the base class to my class (which is inherited
from customvalidator)
protected override void AddAttributesToRender(System.Web.UI.HtmlTextWriter
writer)

{

/// TODO: Get rid of the Custom EvaluationFunction

Attributes.Remove("evaluationfunction");

Attributes["evaluationfunction"] = "CustomValidatorEvaluateFunction";

base.AddAttributesToRender(writer);

writer.AddAttribute("requiredfield", RequiredField.ToString().ToLower());

writer.AddAttribute("validatewhenempty",
ValidateEmptyText.ToString().ToLower());

writer.AddAttribute("label", Label);

writer.AddAttribute("validationGroup1", ValidationGroup1);

}

i tried the same remove() function as above in my overriden method but no
luck :(


[quoted text, click to view]

Teemu Keiski
8/5/2007 12:00:00 AM
They aren't written from Attributes collection but directly as expando
attribute on the derived, concrete validator implementation

protected override void AddAttributesToRender(HtmlTextWriter writer)
{
base.AddAttributesToRender(writer);
if (base.RenderUplevel)
{
string controlId = this.ClientID;
HtmlTextWriter writer2 = base.EnableLegacyRendering ? writer : null;
base.AddExpandoAttribute(writer2, controlId, "evaluationfunction",
"CustomValidatorEvaluateIsValid", false);
if (this.ClientValidationFunction.Length > 0)
{
//client-side registration
}
}
}

AddExpandoAttribute is implemented as follows

internal static void AddExpandoAttribute(Control control, HtmlTextWriter
writer, string controlId, string attributeName, string attributeValue, bool
encode)
{
if (writer != null)
{
writer.AddAttribute(attributeName, attributeValue, encode);
}
else
{
control.Page.ClientScript.RegisterExpandoAttribute(control,
controlId, attributeName, attributeValue, encode);
}
}


so basically you could try registering the attribute with
control.Page.ClientScript.RegisterExpandoAttribute yourself.

--
Teemu Keiski
AspInsider, ASP.NET MVP
http://blogs.aspadvice.com/joteke
http://teemukeiski.net





[quoted text, click to view]

wawang NO[at]SPAM online.microsoft.com (
8/9/2007 12:00:00 AM
Thanks Teemu for your informative input.

Hi TS,

Please feel free to let us know if there's anything unclear. Thanks.


Regards,
Walter Wang (wawang@online.microsoft.com, remove 'online.')
Microsoft Online Community Support

==================================================
When responding to posts, please "Reply to Group" via your newsreader so
that others may learn and benefit from your issue.
==================================================

This posting is provided "AS IS" with no warranties, and confers no rights.
AddThis Social Bookmark Button