Проблеми с Prado client side onclick event на TLinkButton
Преди известно време срещнах доста сложен и труден проблем при използването на Prado famework-а в един проект. За тези от вас, които не са наясно това е PHP framework, приличащ изключително много на asp.net.
Ето и проблема: Имах една доста дълга форма от контроли и валидатори, но спрямо едно от полетата се нуждаех от javascript confirm функцията. Причината е, че трябваше потребителят да се съгласи или не с изпращането на данните, въпреки че едно от полетата е празно (ако е празно разбира се). Добре, това е лесно за реализация, но не и когато имаш други полета и валидатори към тях, защото confirm функцията трябва да бъде извикана, само ако всички останали полета са валидирани при клиента. Onclick javascript събитието се изпълнява преди валидацията. Това е същината на проблема. Как реших проблема? Аз не харесвам решението, но просто не успях да намеря друго. Ето го и него:
- Слагам това отгоре в страницата като javascript код:
var hasError = false; function emailCheckValidator(sender, parameter) { if(!hasError && $('<%= $this->Email->ClientID %>').getValue().toString().length==0 && !confirm('<%=LABEL_SURE_CONTINUE%>')) { return false; } else { return true; } }
- На всеки валидатор слагам client side validation error ето така:
<prop:ClientSide.OnValidationError> hasError = true; </prop:ClientSide.OnValidationError>
- Преди линк бутона слагам допълнителен валидатор:
<com:TTextBox ID="controlField" CssClass="text-field" Style="display: none;" /> <com:TCustomValidator ControlToValidate="controlField" ValidationGroup="SubmitGroup" ClientValidationFunction="emailCheckValidator" OnServerValidate="validateControlField" Text="" Display="Dynamic" FocusOnError="true" />
- На самия TLinkButton слагам onclick client cide event:
<com:TLinkButton ID="SubmitButton" ValidationGroup="SubmitGroup" OnClick="submitButtonClicked" Text="<%=LABEL_SAVE%>" Attributes.OnClick="hasError = false;" />
- И най-накрая създавам custom validator функцията, която винаги връща true:
public function validateControlField($sender, $param) { $param->IsValid = true; }
Това е всичко. Prado е един много добър framework. Но все пак мразя, когато трябва да пиша такива неща. Знаете ли по-добър метод ? Споделете го, моля!
Прочети статията на: English
Все още няма коментари.