2012-02-14 31 views
5

Tôi có một điều khiển người dùng nơi tôi có hai bảng, một ở bên trái và bên kia ở bên phải, bên trái có một số thông tin thanh toán của khách hàng và bên phải một số thông tin giao hàng. trong thông tin giao hàng có một bộ xác nhận requiredfieldvalidator, các bảng này được gói trong bảng điều khiển cập nhật. Trạng thái mặc định là cả hai bảng hiển thị, bên dưới các bảng có hộp kiểm cho biết "Giao hàng giống như thanh toán", khi bạn kiểm tra bảng điều khiển ở bên phải "Bảng điều khiển" biến mất và sau đó bạn tiếp tục.Xác nhận người dùng vẫn hiển thị mặc dù bị vô hiệu hóa

Số phát hành: Cho phép nói tôi xóa văn bản trong Tên vận chuyển và tôi không nhấp vào bất kỳ nơi nào khác, sau đó tôi vào hộp kiểm "Giống như thanh toán" trong giây lát cho thấy xác thực màu đỏ và sau đó biến mất. Tôi đã cố gắng tạo ra một chức năng vô hiệu hóa các validator tức

RequireFieldValidator1.Enabled = false; 

Nó hoạt động tốt trong các điều khoản nó không hiển thị xác nhận trước khi dissapears bảng điều khiển vận chuyển, nhưng cho phép nói rằng tôi thay đổi suy nghĩ của tôi và nhấp vào nó một lần nữa để hiển thị nó . Bây giờ khi tôi xóa tên trong bảng vận chuyển và bấm vào một nơi khác, nó không cho phép tôi đi bất cứ nơi nào nhưng nó không hiển thị văn bản xác nhận.

Vì vậy, tôi đã làm logic này:

if (ckSameBilling.checked) 
{ 
    RequiredFieldValidator.Enabled = false; 
} 
else 
{ 
     RequiredFieldValidator.Enabled = true; 
} 

Nhưng bây giờ nó quay trở lại với hành vi tương tự như tôi demostrated trên, xóa Tên Vận chuyển và nhấp checbox .. tôi có thể nhìn thấy các xác nhận màu đỏ trong giây lát.

đang liên quan

//All this is wrapped in an update panel 
<asp:Panel ID="pnl" runat="server"><div> 
    asp:TextBox ID="txtShippingFirstName" runat="server" Width="130px" Columns="30" 
    MaxLength="100" asp:TextBox><div> 

<asp:RequiredFieldValidator ID="Requiredfieldvalidator1" ErrorMessage="Name Required" 
    ControlToValidate="txt" 
    runat="server" Display="Dynamic" CssClass="Error"> 
</asp:RequiredFieldValidator> 
</asp:Panel> 

<div style="margin-left: 145px;"> 
    <asp:CheckBox ID="Billing" runat="server" Font-Bold="True" 
     Text"Same as Billing" OnCheckedChanged="Billing_CheckedChanged" 
     AutoPostBack="True" /> 
</div> 

codebehind:

protected void Billing_CheckedChanged(object sender, EventArgs e) 
{  
    if (Billing.Checked) 
    { 
     //Disable the shipping fields validations 
     DisableEnable(true); 
     pnl.Visible = false; 
    } 
    else 
    { 
     DisableEnable(false); 
     pnl.Visible = true; 
    } 
} 

private void DisableEnable(bool enable) 
{ 
    if (enableFields) 
    { 
     Requiredfieldvalidator1.Enabled = false; 
     //a bunch of required validations below... 
    } 
    else 
    { 
     Requiredfieldvalidator1.Enabled = true; 
     //a bunch of required validations below.. 
    } 
} 

Trả lời

5

Bạn đã thử vô hiệu hóa trình xác thực trong Javascript (không phải phía máy chủ) trước khi bạn thực hiện postback của UpdatePanel?

Bạn có thể sử dụng các mặt hàng chức năng sau đây để vô hiệu hóa xác nhận của bạn:

var yourValidator = document.getElementById('yourValidatorClientID') 
ValidatorEnable(yourValidator, false); 

này nên dừng lại 'flash' xác nhận. Bạn có thể căn cứ vào CheckBox thay đổi phía khách hàng của mình.

Bạn cũng có thể bao gồm tất cả các trình xác thực của mình trong các nhóm riêng biệt cho từng phần và sau đó vô hiệu hóa toàn bộ nhóm người xác thực cùng một lúc. Xem những sản phẩm sau thread SO cho biết thêm:

Enable/disable asp.net validator controls within a specific "ValidationGroup" with jQuery?

+0

sử dụng cách tiếp cận jquery, cảm ơn bạn rất nhiều .. Tôi không phải là một guru ở đó nhưng làm thế nào tôi có thể kiểm tra trạng thái của hộp kiểm trong jquery? (cho dù đã kiểm tra hay chưa)? Cảm ơn bạn một lần nữa – user710502

0
private void DisableEnableShippingFieldsValidations(bool enableFields) 
{ 
    if (enableFields) 
     ckBilling.CausesValidation = false; 
    else 
     ckBilling.CausesValidation = true; 
} 

Bằng việc sử dụng tài sản nguyên nhân xác nhận của hộp kiểm, bạn là bằng cách thông qua xác nhận.


Đề xuất

Trong khi làm kiểm chứng thực, hãy sử dụng tài sản Validation Group cho các điều khiển để xác nhận và cho nút/CheckBox mà sẽ làm xác nhận.

+0

Tại sao không viết lại rằng phương pháp cho một dòng: 'ckSameBilling.CausesValidation = enableFields;'!? Theo kinh nghiệm của tôi, nhiều đường dẫn mã khó đọc hơn một đường dẫn mã duy nhất dựa trên dữ liệu.(Tôi sẽ _laugh_ ở câu cuối cùng nếu ai đó viết nó mà không có ví dụ hỗ trợ, nhưng đây là ví dụ hỗ trợ hoàn hảo! :) – sarnold

Các vấn đề liên quan