Borys Pawluczuk

Borys Pawluczuk programista
web/mvc/rest

Temat: Validacja listbox

Doszedłem juz do tego jak validować element listbox, chodzi o kontrolę czy wybrano jakiś element z listy (kod poniżej) i teraz co mam tutaj jeszcze zrobić żeby po naciśnięciu buttona(update) validator zablokował dalsze działanie strony tak jak w javascript onclick="return false" ?

<asp:Button class="button" ID="Button2" runat="server" Text="Update" ValidationGroup="Save" OnClick="BtnSaveClick" />

<asp:CustomValidator ID="LbCompaniesListValidator" runat="server" ControlToValidate="LbCompaniesList"
ErrorMessage="Select Companies List" OnServerValidate="LbCompaniesList_ServerValidate"
ValidateEmptyText="True" ValidationGroup="Save" ForeColor="Red"></asp:CustomValidator>

protected void LbCompaniesList_ServerValidate(object source, ServerValidateEventArgs args)
{
if (this.LbCompaniesList.SelectedIndex == -1)
{
args.IsValid = false;
}
else
{
args.IsValid = true;
}
}

Temat: Validacja listbox

Upewnij się, czy listbox ma ustawione CausesValidation="true".
Po stronie serwera sprawdzaj ustawione IsValid:

protected void Button2_Click(object sender, EventArgs e)
{
if(Page.IsValid)
{
// dalsze akcje
}
}

Skracaj kod:
args.IsValid = this.LbCompaniesList.SelectedIndex != -1
Borys Pawluczuk

Borys Pawluczuk programista
web/mvc/rest

Temat: Validacja listbox

To jest mój listbox:

<asp:ListBox ID="LbCompaniesList" runat="server" DataValueField="id" DataTextField="name"
CssClass="list-box" SelectionMode="Multiple" style="width: 300px; height: 295px" CausesValidation="true">
</asp:ListBox>

Chodzi mi o to żeby to działało tak jak to:

<asp:TextBox ID="TbName" runat="server" MaxLength="45"></asp:TextBox>

<asp:RequiredFieldValidator ID="NameValidator" runat="server" ControlToValidate="TbName"
Display="Dynamic" ErrorMessage="*" ForeColor="Red" ValidationGroup="Save"></asp:RequiredFieldValidator>

Tutaj jak nic nie wpisze w pole textbox to cała dalsza akcja jest wstrzymana, czy da się tak samo zrobić dla listbox'a ?
Tomasz M.

Tomasz M. never go full
retard!

Temat: Validacja listbox

Adam Zakrzewski:
Tutaj jak nic nie wpisze w pole textbox to cała dalsza akcja jest wstrzymana, czy da się tak samo zrobić dla listbox'a ?

No tak jak Adrian napisł, jeśli Page.IsValid masz false, to oznacza, że nie procesujesz dalej strony. Jeśli button przenosci cię do innej strony, to nie rób Redirect / Transfer czy coś tam. Po postbacku validator powinien pokazać błędy jeśli masz Summary na stronie.Tomasz M. edytował(a) ten post dnia 25.01.13 o godzinie 12:17
Borys Pawluczuk

Borys Pawluczuk programista
web/mvc/rest

Temat: Validacja listbox

No właśnie nie robie redirect, nie wiem nie znam się na tyle, dopiero zaczynam z asp, ale po kliknieciu w button:

<asp:Button class="button" ID="Button2" runat="server" Text="Update" ValidationGroup="Save" OnClick="BtnSaveClick" />

protected void BtnSaveClick(object sender, EventArgs e)
{
if (Page.IsValid)
{
(...)
}
}
strona idzie dalej, owszem nie wykonuje operacji zawartych w BtnSaveClick ale też nie staje w miejscu
Tomasz M.

Tomasz M. never go full
retard!

Temat: Validacja listbox

Adam Zakrzewski:
strona idzie dalej, owszem nie wykonuje operacji zawartych w BtnSaveClick ale też nie staje w miejscu

Co to znaczy "staje w miejscu"? Taki button spowoduje tylko postbacka, czyli przeładowanie strony (tej samej) z tymże w trybie postback właśnie (IsPostback będziesz miał true). NIe wiem na ile znasz asp, ale warto poczytać jeśli nie rozumiesz tego - to w zasadzie podstawa działania asp. A odpowiadając takim buttonem walidowanym po stronie serwera nie zrobisz javascriptowej walidacji, musiałbyś ją zrobić po stronie klienta pisząc odpowiedni kod.
Borys Pawluczuk

Borys Pawluczuk programista
web/mvc/rest

Temat: Validacja listbox

no dokładnie przeładowuje, a w przykładzie walidacji textboxa który napisałem wyżej nie przeładowuje dlaczego? tylko tego mi brakuje żeby ta validacja przebiegała tak samo
Tomasz M.

Tomasz M. never go full
retard!

Temat: Validacja listbox

Adam Zakrzewski:
no dokładnie przeładowuje, a w przykładzie walidacji textboxa który napisałem wyżej nie przeładowuje dlaczego? tylko tego mi brakuje żeby ta validacja przebiegała tak samo

No bo te konkertne walidatory mają zaimplementowaną obsługę walidacji po stronie klienta (w java srcipt'cie). Jeśli chcesz to zrobić, to musisz zdefiniować funkcję walidującą w wparametrze ClientValidationFunction.

<asp:TextBox ID="DiscountAmountTextBox" runat="server" Columns="10"></asp:TextBox>
<asp:CustomValidator id="DiscountAmountCustomValidator"
runat="server"
ControlToValidate="DiscountAmountTextBox"
ValidateEmptyText="true"
ClientValidationFunction="CheckDiscountAmount"
ErrorMessage="Please enter either an amount or a discount"
ToolTip="Please enter either an amount or a percentage">*</asp:CustomValidator>


http://www.geekzilla.co.uk/ViewD27B15B4-71A4-4258-81EE...
Borys Pawluczuk

Borys Pawluczuk programista
web/mvc/rest

Temat: Validacja listbox

Mój walidator:

<asp:CustomValidator ID="LbCompaniesListValidator" runat="server" ControlToValidate="LbCompaniesList"
ErrorMessage="Select Companies List" OnServerValidate="LbCompaniesList_ServerValidate"
ValidateEmptyText="True" ValidationGroup="Save" ForeColor="Red" ClientValidationFunction="test">
</asp:CustomValidator>

i javascript do niego:

<script type="text/javascript">
function test() {
return false;
}
</script>

Mimo to cały czas przeładowuje stronę, nie wiem może to inaczej trzeba zrobić?

Podobne tematy


Następna dyskusja:

Listbox




Wyślij zaproszenie do