2014-06-26 27 views
6

पर सक्षम रेडियोबूटटन अक्षम है मुझे रेडियोबटन की एएसपीनेट सक्षम स्थिति के साथ एक अजीब समस्या है।एएसपीनेट सर्वर साइड क्लाइंट साइड

.aspx पेज में कोड:

<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="WebForm1.aspx.vb" Inherits="testradioButton.WebForm1" %> 
<!DOCTYPE html> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
    <script type="text/javascript" src="https://code.jquery.com/jquery-1.11.1.min.js"></script> 
    <script type="text/javascript"> 
     $(document).ready(function() { 
      $('#radYes').change(function() { gererEtat(); }); 
      $('#radNo').change(function() { gererEtat(); }); 
     }); 
     function gererEtat() { 
      $('#radDisabledYes').prop('disabled', !$('#radYes').prop('checked')); 
      $('#radDisabledNo').prop('disabled', !$('#radYes').prop('checked')); 
     } 
    </script> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
     <asp:radiobutton ID="radYes" runat="server" GroupName="test" Text="yes"></asp:radiobutton> 
     <asp:radiobutton ID="radNo" runat="server" GroupName="test" Text="No"></asp:radiobutton> 
    </div> 
    <div> 
     <asp:radiobutton ID="radDisabledYes" runat="server" GroupName="test2" Text="yes"></asp:radiobutton> 
     <asp:radiobutton ID="radDisabledNo" runat="server" GroupName="test2" Text="No"></asp:radiobutton> 
    </div> 
    <asp:LinkButton ID="lnktoto" runat="server" Text="Submit"></asp:LinkButton> 
    </form> 
</body> 
</html> 

और कोड के पीछे:

Public Class WebForm1 
Inherits System.Web.UI.Page 

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
    If Not IsPostBack Then 
     radDisabledYes.Enabled = radYes.Checked 
     radDisabledNo.Enabled = radYes.Checked 
    End If 
    Stop 
End Sub 

Private Sub Radiobutton1_CheckedChanged(sender As Object, e As EventArgs) Handles radYes.CheckedChanged, radNo.CheckedChanged 
    radDisabledYes.Enabled = radYes.Checked 
    radDisabledNo.Enabled = radYes.Checked 
End Sub 

Private Sub lnktoto_Click(sender As Object, e As EventArgs) Handles lnktoto.Click 
    Stop 
End Sub 
End Class 

सर्वर साइड पर मैं पहली बार लोड पर रेडियो बटन को अक्षम करें। मेरे पास जावास्क्रिप्ट में एक ही स्थिति है। तो ग्राहक पक्ष पर, यदि उपयोगकर्ता हां पर क्लिक करता है, तो मैं कुछ नियंत्रण सक्षम करता हूं। मैं सर्वर की तरफ वही करता हूं। यह रेडियो बटन को छोड़कर सभी प्रकार के नियंत्रणों के साथ बहुत अच्छा काम करता है।

मान लें कि लोड पर, मैं रेडियो बटन अक्षम करता हूं। ग्राहक पक्ष पर, उपयोगकर्ता इनपुट पर आधार, मैं उन्हें सक्षम करता हूं (जावास्क्रिप्ट में)। उपयोगकर्ता ने एक रेडियो बटन चेक किया और पेज सबमिट किया। सर्वर की ओर, रेडियो बटन अक्षम और अनचेक किया गया है। मेरे पास कोड है जो शर्तों की जांच करता है और इसे सक्षम करता है। लेकिन रेडियो बटन अभी भी चेक नहीं किया गया है। मैं समझता हूं क्यों, सर्वर चेक किए गए राज्य को अनदेखा करता है क्योंकि पहले, ऐसा लगता है कि यह अक्षम है। क्या यह काम करने का कोई तरीका है? मुझे पता है कि सर्वर चेक किए गए राज्य को प्राप्त कर रहा है क्योंकि जब मैं Request.Form की जांच करता हूं, तो मुझे radDisable = Yes दिखाई देता है।

आपकी मदद के लिए धन्यवाद।

+0

jsfiddle प्रदान करता है कि आप एएसपी रेडियो बटन का उपयोग नहीं कर रहे हैं। यह सरल एचटीएमएल इनपुट नियंत्रण है। आप इसे सर्वर पर कैसे एक्सेस कर रहे हैं? क्या आपने अपने एचटीएमएल में runat = "server" विशेषता का उपयोग किया है? – ataurrehman

+0

मैं jsfiddle में एएसपीनेट कोड नहीं डाल सकता (या मैं कर सकता हूं?)। मैं एएसपी रेडियो बटन का उपयोग कर रहा हूँ। –

+0

बेशक आप नहीं कर सकते हैं। पुष्टि के लिए पूछे गए। उन रेडियो बटनों के लिए व्यूस्टेट को अक्षम करने का प्रयास करें और वही करें। पूरे पृष्ठ के लिए विचार अक्षम न करें। बस रेडियो बटन दृश्य स्थिति अक्षम करें। – ataurrehman

उत्तर

1

यहाँ हैक आप :)

Public Class WebForm1 
Inherits System.Web.UI.Page 

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
    If radYes.Checked Then 
     radDisabledYes.InputAttributes.Remove("disabled") 
     radDisabledNo.InputAttributes.Remove("disabled") 
    Else 
     radDisabledYes.InputAttributes("disabled") = "disabled" 
     radDisabledNo.InputAttributes("disabled") = "disabled" 
    End If 
    Stop 
End Sub 

Private Sub Radiobutton1_CheckedChanged(sender As Object, e As EventArgs) Handles radYes.CheckedChanged, radNo.CheckedChanged 
    ' not really needed anymore, but lets leave it in here for fun! 
End Sub 

Private Sub lnktoto_Click(sender As Object, e As EventArgs) Handles lnktoto.Click 
    Stop 
End Sub 
End Class 

लिए देख रहे हैं यह अनिवार्य रूप से विकलांग नियंत्रण के बारे में नेट की सुरक्षा जांच को नजरअंदाज है। नियंत्रण अभी भी सक्षम/अक्षम हैं, लेकिन आप WebControl.Enabled संपत्ति के साथ गड़बड़ किए बिना ऐसा कर रहे हैं।

+0

इसका परीक्षण करेगा। मैं रेडियोबटन नियंत्रण को अधिभारित कर सकता हूं और बदल सकता हूं कि आपके उत्तर के साथ काम कैसे सक्षम करें। –

+0

मैं इस उत्तर के लिए वोट देता हूं क्योंकि यह एक ऐसा नियंत्रण है जो किसी अन्य नियंत्रण में समाहित करना आसान है, इसलिए डेवलपर के पास मेरे जैसा ही मुद्दा नहीं होगा। –

0

एएसपी.NET वास्तव में अक्षम नियंत्रणों को वापस पोस्ट करने के बारे में वास्तव में भयावह (और सही तरीके से) हो सकता है। तो वास्तव में उन्हें अक्षम करने की बजाय - प्रभाव अनुकरण करें। जैसे विशेषता onfocus = "this.blur()" सेट करें - यह बटन पर क्लिक करना बंद कर देगा। और जब आपको बटन को सक्षम करने की आवश्यकता होती है - विशेषता को हटा दें।

+0

मुझे इस समाधान के साथ क्या पसंद नहीं है यह है कि रेडियो बटन में अक्षम शैली नहीं होगी। लेकिन मुझे उन्हें पीछे कोड में अक्षम करने का हिस्सा पसंद नहीं है। जावास्क्रिप्ट में मैंने यही किया है, मैं सर्वर सर्वर पर उन्हें अक्षम करता हूं, वे हमेशा सक्षम होते हैं। –

0

ऐसा लगता है कि आपका कोड व्यवहार स्वीकार्य है जब तक कि सर्वर रेडियो बटन के राज्य परिवर्तनों की पहचान करने में असमर्थ है, जो इसे मानता है।

पृष्ठभूमि में केवल एक छुपा और अक्षम रेडियो बटनसेट क्यों न रखें? जब आप अक्षम दिखना चाहते हैं, तो उस सेट को अनदेखा करें और वास्तविक लोगों को जावास्क्रिप्ट से छुपाएं। फिर आपको सर्वर पर जाने वाले अक्षम फ़ॉर्मों में कोई समस्या नहीं आती है।

संपादित करें: फिर से अपना प्रश्न देखने पर, मुझे सर्वर पक्ष पर कुछ भी अक्षम करने की आवश्यकता के बारे में आश्चर्य है। शायद एक सुरक्षा जोखिम है जिसके बारे में मुझे पता नहीं है। एक वैकल्पिक विकल्प बटनसेट सक्षम सर्वरसाइड को छोड़ना और दस्तावेज़ लोड पर जावास्क्रिप्ट के साथ अक्षम होना हो सकता है।

+0

मुझे आपका संपादन पसंद है क्योंकि यह वही है जो मैंने समाप्त किया था। लेकिन जिस संगठन में मैं काम करता हूं, वहां अभी भी यह नियम है जो कहता है कि उपयोगकर्ता ने जावास्क्रिप्ट को अक्षम कर दिया है, भले ही सबकुछ काम करना जारी रखे। तो सैद्धांतिक रूप से, मैं जेएस पर भरोसा नहीं कर सकता। –

0

मैं एक समाधान अपने छोटा सा Trickey है लेकिन यह jQuery कोड में अपने नियंत्रण के चयन के लिए आप मदद कर सकते हैं

<script type="text/javascript"> 
    $(document).ready(function() { 
     $('#radYes').change(function() { gererEtat(); }); 
     $('#radNo').change(function() { gererEtat(); }); 

     // restore radio button disable status on document ready 
     var status = $("#txtradioStatus").val() == "true" ? true : false; 
     $('#radDisabledYes').prop('disabled', !status); 
     $('#radDisabledNo').prop('disabled', !status); 

    }); 
    function gererEtat() { 
     $('#radDisabledYes').prop('disabled', !$('#radYes').prop('checked')); 
     $('#radDisabledNo').prop('disabled', !$('#radYes').prop('checked')); 
     // store radio button status in hidden field 
     $("#txtradioStatus").val($('#radYes').prop('checked')); 
    } 

</script> 



<div> 
    <asp:radiobutton ID="radYes" runat="server" GroupName="test" Text="yes"></asp:radiobutton> 
    <asp:radiobutton ID="radNo" runat="server" GroupName="test" Text="No"></asp:radiobutton> 
</div> 
<div> 
    <asp:radiobutton ID="radDisabledYes" runat="server" GroupName="test2" Text="yes"></asp:radiobutton> 
    <%-- take hidden field that you can keep status of radio button after postback--%> 
    <input type="hidden" runat="server" value="true" id="txtradioStatus" /> 
    <asp:radiobutton ID="radDisabledNo" runat="server" GroupName="test2" Text="No"></asp:radiobutton> 
</div> 
<asp:LinkButton ID="lnktoto" runat="server" Text="Submit"></asp:LinkButton> 
1
$(document).ready(function() { 
    $('#<%=radYes.ClientID%>').change(function() { gererEtat(); }); 
    $('#<%=radNo.ClientID%>').change(function() { gererEtat(); }); 
    function gererEtat() { 
    $('#<%=radDisabledYes.ClientID%>').prop('disabled', !$('#<%= radYes.ClientID%>').prop('checked')); 
    $('#<%=radDisabledNo.ClientID%>').prop('disabled', !$('#<%=radYes.ClientID%>').prop('checked')); 
    } 
}); 

उपयोग 'ClientID' क्योंकि नियंत्रण सर्वर नियंत्रण है।

0

submitdisabledcontrols = "true" इससे आपकी समस्या हल हो जाएगी। नीचे दिए गए चरणों का पालन करें।

कारण यह है कि आपने सर्वर पक्ष से नियंत्रण अक्षम कर दिया है, भले ही आपने इसे JQuery का उपयोग करके क्लाइंट से सक्षम किया हो, सर्वर को इसके बारे में पता नहीं है। इसलिए यह वही मान रखता है क्योंकि यह अक्षम नियंत्रण के मान को बदलने की अपेक्षा नहीं कर रहा है।

दो चीजें करने के लिए हैं।

पहले उसे हटा पृष्ठ लोड कोड। (आवश्यक नहीं इसके अलावा Radiobutton1_CheckedChanged घटना)

Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load 
    'If Not IsPostBack Then 
    ' radDisabledYes.Enabled = radYes.Checked 
    ' radDisabledNo.Enabled = radYes.Checked 
    'End If 
End Sub 

तब क्लाइंट पक्ष कोड

<script type="text/javascript"> 
    $(document).ready(function() { 

     $('#radYes').change(function() { gererEtat(!$('#radYes').prop('checked')); }); 
     $('#radNo').change(function() { gererEtat(!$('#radYes').prop('checked')); }); 
     if (!$('#radYes').prop('checked')) { 
      gererEtat(true); 
     } 
    }); 
    function gererEtat(isEnable) { 
     $('#radDisabledYes').prop('disabled', isEnable); 
     $('#radDisabledNo').prop('disabled', isEnable); 
    } 
</script> 

अंत में करने के लिए प्रपत्र तत्व में submitdisabledcontrols = "true" विशेषता जोड़ बदलने ।

<form id="form1" runat="server" submitdisabledcontrols="true" > 

रन और कोड यह काम करेंगे परीक्षण करें।

संबंधित मुद्दे