c# "কন্ট্রোল সংগ্রহগুলি সংশোধন করা যাবে না কারণ নিয়ন্ত্রণে কোড ব্লক রয়েছে"




asp.net user-controls (18)

আমি একটি স্লাইডার যে একটি সহজ ব্যবহারকারী নিয়ন্ত্রণ তৈরি করার চেষ্টা করছি। যখন আমি ব্যবহারকারীর নিয়ন্ত্রণে AjaxToolkit SliderExtender যোগ করি তখন আমি এটিটি পেতে পারি (* & $ # () @ # ত্রুটি:

    Server Error in '/' Application. The Controls collection cannot be modified because the control contains code blocks (i.e. ``). Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

    Exception Details: System.Web.HttpException: The Controls collection cannot be modified because the control contains code blocks (i.e. ``).

    Source Error:

    An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

    Stack Trace:

    [HttpException (0x80004005): The Controls collection cannot be modified because the control contains code blocks (i.e. ``).]    System.Web.UI.ControlCollection.Add(Control child) +8677431    AjaxControlToolkit.ScriptObjectBuilder.RegisterCssReferences(Control control) in d:\E\AjaxTk-AjaxControlToolkit\Release\AjaxControlToolkit\ExtenderBase\ScriptObjectBuilder.cs:293 AjaxControlToolkit.ExtenderControlBase.OnLoad(EventArgs e) in d:\E\AjaxTk-AjaxControlToolkit\Release\AjaxControlToolkit\ExtenderBase\ExtenderControlBase.cs:306 System.Web.UI.Control.LoadRecursive()
    +50    System.Web.UI.Control.LoadRecursive()
    +141    System.Web.UI.Control.LoadRecursive()
    +141    System.Web.UI.Control.LoadRecursive()
    +141    System.Web.UI.Control.LoadRecursive()             
    +141    System.Web.UI.Control.LoadRecursive()
    +141    System.Web.UI.Control.LoadRecursive()
    +141    System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +627


    Version Information: Microsoft .NET Framework Version:2.0.50727.3074; ASP.NET Version:2.0.50727.3074

আমি ব্যবহারকারীর নিয়ন্ত্রণে একটি স্থানধারক নির্বাণ করার চেষ্টা করেছি এবং প্লেসহোল্ডার এবং প্রোগ্রামারের সাথে পাঠ্যবক্স এবং স্লাইডার এক্সটেন্ডার যোগ করছি এবং আমি এখনও ত্রুটিটি পেয়েছি।

এখানে সহজ কোড:

<table cellpadding="0" cellspacing="0" style="width:100%">
    <tbody>
        <tr>
            <td></td>
            <td>
                <asp:Label ID="lblMaxValue" runat="server" Text="Maximum" CssClass="float_right" />
                <asp:Label ID="lblMinValue" runat="server" Text="Minimum" />
            </td>
        </tr>
        <tr>
            <td style="width:60%;">
                <asp:CheckBox ID="chkOn" runat="server" /><asp:Label ID="lblPrefix" runat="server" />:&nbsp;<asp:Label ID="lblSliderValue" runat="server" />&nbsp;<asp:Label ID="lblSuffix" runat="server" />
            </td>
            <td style="text-align:right;width:40%;">                

                    <asp:TextBox ID="txtSlider" runat="server" Text="50" style="display:none;" />
                    <ajaxToolkit:SliderExtender ID="seSlider" runat="server" 
                        BehaviorID="seSlider" 
                        TargetControlID="txtSlider" 
                        BoundControlID="lblSliderValue" 
                        Orientation="Horizontal" 
                        EnableHandleAnimation="true" 
                        Length="200" 
                        Minimum="0" 
                        Maximum="100" 
                        Steps="1" />

            </td>
        </tr>
    </tbody>
</table>

সমস্যাটা কি?


আমি শুধু এই সমস্যার মধ্যে পাশাপাশি অন্য সমাধান পাওয়া যায়।

আমি একটি অ্যাসপি সঙ্গে কোড ব্লক মোড়ানো যে পাওয়া যায়: PlaceHolder- ট্যাগ সমস্যা সমাধান করে।

<asp:PlaceHolder runat="server">
  <meta name="ROBOTS" content="<%= this.ViewData["RobotsMeta"] %>" />
</asp:PlaceHolder>

(আমি যে সিএমএস ব্যবহার করছি সেটি কিছু কোড থেকে হেড-সেকশনে ঢোকানো হচ্ছে যা আমাকে মেটা ট্যাগ ইত্যাদি সম্পর্কিত বিভিন্ন তথ্য সহ কাস্টম কন্ট্রোল ব্লকগুলি যুক্ত করতে বাধা দেয় তাই এটি আমার জন্য একমাত্র উপায়।)


<script> contentplaceholder <head> ভিতরে থাকা contentplaceholder বাইরে <head> পরিবর্তে <head> ভিতরে <script> ভিতরে <script> ঢুকিয়ে এই রকম একটি ত্রুটি সমাধান করেছি।


আমার ক্ষেত্রে আমি এই ত্রুটিটি পেয়েছি কারণ আমি ভুলভাবে এটির ভিতরে এইচটিএমএল সহ একটি ডিভিকে ইননার টেক্ট স্থাপন করছিলাম।

উদাহরণ:

SuccessMessagesContainer.InnerText = "";

   <div class="SuccessMessages ui-state-success" style="height: 25px; display: none;" id="SuccessMessagesContainer" runat="server">
      <table>
         <tr>
            <td style="width: 80px; vertical-align: middle; height: 18px; text-align: center;">
               <img src="<%=Image_success_icn %>" style="margin: 0 auto; height: 18px;
                  width: 18px;" />
            </td>
            <td id="SuccessMessage" style="vertical-align: middle;" class="SuccessMessage" runat="server" >
            </td>
         </tr>
      </table>
   </div>

সার্ভার ট্যাগ যা অংশটি সরান এবং এটি অন্য কোথাও রাখুন যদি আপনি কোড থেকে গতিশীল নিয়ন্ত্রণ যোগ করতে চান

আমি পৃষ্ঠার প্রধান বিভাগ থেকে আমার জাভাস্ক্রিপ্ট সরানো এবং পৃষ্ঠাটির শরীরের মধ্যে এটি যোগ এবং এটি কাজ পেয়েছিলাম


প্রথমে, কোড ব্লকটি <% = এর পরিবর্তে <% = দিয়ে শুরু করুন:

<head id="head1" runat="server">
  <title>My Page</title>
  <link href="css/common.css" rel="stylesheet" type="text/css" />
  <script type="text/javascript" src="<%# ResolveUrl("~/javascript/leesUtils.js") %>"></script>
</head>

এটি একটি প্রতিক্রিয়া থেকে কোড ব্লক পরিবর্তন করে। কোড কোড ব্লক একটি ডেটাবেসিং অভিব্যক্তি।
যেহেতু <%# ... %> ডেটাবেড এক্সপ্রেশন কোড ব্লক নয়, CLR অভিযোগ করবে না। তারপর মাস্টার পৃষ্ঠার কোডে, আপনি নীচেরটি যুক্ত করতে চান:

protected void Page_Load(object sender, EventArgs e)
{
  Page.Header.DataBind();    
}

মাথা ট্যাগের বাইরে আপনার জাভা স্ক্রিপ্ট কোড লিখতে চেষ্টা করুন এটি অবশ্যই কাজ করবে। আমি যখন আমার জাভা স্ক্রিপ্ট কোডটি অনুলিপি করে পৃষ্ঠার নীচের দিকে আটকায় তখন এটি সমাধান হয়। পূর্ববর্তীতে এটি ট্যাগ ট্যাগটি বন্ধ করার আগে এখন HEAD ট্যাগটিতে স্থাপন করা হয়েছে।

    </div>
        <script>
                    function validate() {
                        try {

                        var username = document.getElementById("<%=txtUserName.ClientID%>").value;
                        var password = document.getElementById("<%=txtPWD.ClientID%>").value;

                            if (username == "" && password == "")
                                alert("Enter Username and Passowrd");
                            else {
                                if (username == "")
                                    alert("Enter Username");
                                else if (password == "")
                                    alert("Enter Password");
                            }

                        }

                    catch (err) {
                    }
                }
                </script>
</form>

আপনি যদি আপনার পৃষ্ঠায় স্ক্রিপ্ট ম্যানেজার ব্যবহার করেন তবে একই কার্যকারিতাটি করতে পারেন। আপনি শুধু এই মত স্ক্রিপ্ট নিবন্ধন করতে হবে

<asp:ScriptManager ID="ScriptManager1" runat="server" LoadScriptsBeforeUI="true"   EnablePageMethods="true">  
<Scripts>
      <asp:ScriptReference Path="~/Styles/javascript/jquery.min.js" />
</Scripts>
</asp:ScriptManager>

আমি একই সমস্যা ছিল, কিন্তু এটা জাভাস্ক্রিপ্ট সঙ্গে কিছু করার ছিল না। এই কোড বিবেচনা করুন:

<input id="hdnTest" type="hidden" value='<%= hdnValue %>' />
<asp:PlaceHolder ID="phWrapper" runat="server"></asp:PlaceHolder>
<asp:PlaceHolder ID="phContent" runat="server" Visible="false">
    <b>test content</b>
</asp:PlaceHolder>

প্লেসহোল্ডারদের কোনও ক্ষতিকারক কোড ব্লক না থাকলেও এই পরিস্থিতিতে আপনি একই ত্রুটি পাবেন, এটি অ-সার্ভার নিয়ন্ত্রণ হাইড্রয়েস্ট কোড ব্লকগুলি ব্যবহার করে ঘটে।

শুধু runn = সার্ভারটি hdnTest এ যোগ করুন এবং সমস্যা সমাধান করা হয়েছে।


ট্যাগ <%= %> runat="server" সাথে ট্যাগে কাজ করে না। <%= %> runat="server" <%= %> দিয়ে অন্য কোডটি ( body , head , ...), অথবা runat="server" কন্টেইনার থেকে সরান।


কিছু ক্ষেত্রে ResolveUrl এবং ResolveClientUrl কাজ করে তবে বিশেষ করে জেএস স্ক্রিপ্ট ফাইলের ক্ষেত্রে সব সময় না। এটি কি কিছু পৃষ্ঠাগুলির জন্য কাজ করে তবে আপনি অন্য কোন পৃষ্ঠাগুলিতে নেভিগেট করলে এটি নির্দিষ্ট পৃষ্ঠার আপেক্ষিক পথের কারণে কাজ করবে না।

তাই অবশেষে আমার পরামর্শ সর্বদা আপনার সাইটের পৃষ্ঠাগুলির সম্পূর্ণ পুনঃচেষ্টা করতে হবে কিনা আপনার সমস্ত জাভাস্ক্রিপ্ট রেফারেন্স জরিমানা বা না। Google Chrome এ আপনার সাইটটি খুলুন -> পৃষ্ঠাটিতে ডান ক্লিক করুন -> উত্স পৃষ্ঠাটি ক্লিক করুন -> HTML প্রদর্শিত হবে -> এখন আপনার JS হাইপারলিঙ্কগুলি ক্লিক করুন; যদি এটি কাজ করে তবে এটি অন্য ব্রাউজার উইন্ডোতে জেএস ফাইল খুলতে হবে, নাহলে এটি খুলবে না।


আমি একই সমস্যা সম্মুখীন। আমি নিম্নলিখিত মত সমাধান খুঁজে পাওয়া যায় নি।

সমাধান 1: আমি শরীরের মধ্যে আমার স্ক্রিপ্ট ট্যাগ রাখা।

<body>
   <form> . . . .  </form>
    <script type="text/javascript" src="<%= My.Working.Common.Util.GetSiteLocation()%>Scripts/Common.js"></script> </body>

এখন ট্যাগ সংক্রান্ত দ্বন্দ্ব সমাধান করা হবে।

সমাধান 2:

আমরা উপরের সমাধানগুলির মধ্যে একটি সমাধান করতে পারি যেমন কোড ব্লকটি <% # এর পরিবর্তে <% # দিয়ে প্রতিস্থাপন করুন তবে সমস্যাটি কেবলমাত্র আপেক্ষিক পথ সরবরাহ করবে । আপনি সত্যিই পরম পথ চান তাহলে এটি কাজ করবে না।

সমাধান 1 আমার জন্য কাজ করে। পরবর্তী আপনার পছন্দ।



শরীরের ট্যাগ ভিতরে জাভা স্ক্রিপ্ট কোড রাখুন

<body> 
   <script type="text/javascript">
   </script>
</body>

আমার সিস্টেমের সাথে একই সমস্যা ছিল, আমি আমার পৃষ্ঠার থেকে জাভাস্ক্রিপ্ট কোড মুছে ফেললাম এবং শরীরের ট্যাগ বন্ধ করার আগেই এটি দেহে রাখলাম।


আমি বিভিন্ন পরিস্থিতিতে একই সমস্যা ছিল।
আমি শরীরের ট্যাগ ভিতরে সহজ উপাদান ছিল।
সমাধান ছিল:

<asp:PlaceHolder ID="container" runat="server">
    <a id="child" href="<%# variable %>">Change me</a>
</asp:PlaceHolder>
protected new void Page_Load(object sender, EventArgs e)
{    
    Page.Form.DataBind(); // I neded to Call DataBind on Form not on Header
    container.InnerHtml = "Simple text";
}

"<% #" ডেটাবেডিং কৌশল সরাসরি <link> ট্যাগগুলিতে <head> ট্যাগের অভ্যন্তরে সরাসরি কাজ করবে না:

<head runat="server">

  <link rel="stylesheet" type="text/css" 
        href="css/style.css?v=<%# My.Constants.CSS_VERSION %>" />

</head>

উপরের কোড মূল্যায়ন করা হবে

<head>

  <link rel="stylesheet" type="text/css" 
        href="css/style.css?v=&lt;%# My.Constants.CSS_VERSION %>" />

</head>

পরিবর্তে, আপনি নিম্নলিখিত কাজ করতে হবে (ভিতরে দুটি ডবল কোট মনে রাখবেন):

<head runat="server">

  <link rel="stylesheet" type="text/css" 
        href="css/style.css?v=<%# "" + My.Constants.CSS_VERSION %>" />

</head>

এবং আপনি পছন্দসই ফলাফল পাবেন:

<head>

  <link rel="stylesheet" type="text/css" href="css/style.css?v=1.5" />

</head>

আমি ব্যবহারকারী নিয়ন্ত্রণ একই সমস্যা ছিল। নিয়ন্ত্রণের হোস্টিংয়ের আমার পৃষ্ঠার শিরোনামটিতে মন্তব্য ছিল, আমি সেই মন্তব্যগুলি সরিয়ে দিয়েছি, পরে সবকিছুই কাজ করে। কিছু পোস্ট মাথা থেকে স্ক্রিপ্ট অপসারণ এবং শরীরের মধ্যে স্থাপন সুপারিশ।


আমার ক্ষেত্রে, আমি <%= %> প্রতিস্থাপিত করেছি <%# %> , এবং এটি কাজ করে!







user-controls