Проблеми с 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

  1. Все още няма коментари.

  1. Все още няма нито един trackback.