قم بتغيير رؤية تسمية ASP.NET باستخدام JavaScript

StackOverflow https://stackoverflow.com/questions/7773

  •  08-06-2019
  •  | 
  •  

سؤال

لدي صفحة ASP.NET بها زر asp: غير مرئي.لا يمكنني جعله مرئيًا باستخدام JavaScript لأنه لا يتم عرضه على الصفحة.

ماذا يمكنني أن أفعل لحل هذه المشكلة؟

هل كانت مفيدة؟

المحلول

إذا كنت بحاجة إلى التعامل معها من جانب العميل، فلا يمكنك استخدام الخاصية المرئية من جانب الخادم.بدلاً من ذلك، قم بتعيين نمط عرض CSS الخاص به على "لا شيء".على سبيل المثال:

<asp:Label runat="server" id="Label1" style="display: none;" />

بعد ذلك، يمكنك جعله مرئيًا من جانب العميل باستخدام:

document.getElementById('Label1').style.display = 'inherit';

يمكنك إخفاءه مرة أخرى باستخدام:

document.getElementById('Label1').style.display = 'none';

ضع في اعتبارك أنه قد تكون هناك مشكلات تتعلق بكون ClientID أكثر تعقيدًا من "Label1" في الممارسة العملية.ستحتاج إلى استخدام ClientID مع getElementById، وليس معرف جانب الخادم، إذا كانا مختلفين.

نصائح أخرى

جرب هذا.

<asp:Button id="myButton" runat="server" style="display:none" Text="Click Me" />

<script type="text/javascript">
    function ShowButton() {
        var buttonID = '<%= myButton.ClientID %>';
        var button = document.getElementById(buttonID);
        if(button) { button.style.display = 'inherit'; }
    }
</script>

لا تستخدم التعليمات البرمجية من جانب الخادم للقيام بذلك لأن ذلك قد يتطلب إعادة النشر.بدلاً من استخدام Visibility = "false"، يمكنك فقط تعيين خاصية CSS لإخفاء الزر.ثم، في جافا سكريبت، قم بتبديل هذه الخاصية مرة أخرى عندما تريد إظهار الزر مرة أخرى.

يتم استخدام ClientID لأنه يمكن أن يكون مختلفًا عن معرف الخادم إذا كان الزر داخل عنصر تحكم حاوية التسمية.وتشمل هذه لوحات من أنواع مختلفة.

الاستمرار في ماذا ديف وارد قال:

  • لا يمكنك تعيين مرئي الخاصية إلى خطأ لأنه لن يتم تقديم عنصر التحكم.
  • يجب عليك استخدام أسلوب خاصية لتعيينها عرض ل لا أحد.

تصميم الصفحة/التحكم

<asp:Label runat="server" ID="Label1" Style="display: none;" />

<asp:Button runat="server" ID="Button1" />

الكود خلف

في مكان ما في قسم التحميل:

Label label1 = (Label)FindControl("Label1");
((Label)FindControl("Button1")).OnClientClick = "ToggleVisibility('" + label1.ClientID + "')";

ملف جافا سكريبت

function ToggleVisibility(elementID)
{
    var element = document.getElementByID(elementID);

    if (element.style.display = 'none')
    {
        element.style.display = 'inherit';
    }
    else
    {
        element.style.display = 'none';
    }
}

بالطبع، إذا كنت لا ترغب في التبديل ولكن فقط لإظهار الزر/التسمية، فاضبط طريقة جافا سكريبت وفقًا لذلك.

النقطة المهمة هنا هي أنك تحتاج إلى إرسال المعلومات حول ClientID من عنصر التحكم الذي تريد معالجته من جانب العميل إلى ملف جافا سكريبت إما بتعيين المتغيرات العامة أو من خلال معلمة دالة كما في المثال الخاص بي.

عليك أن تكون حذرا من XSS عند القيام بأشياء مثل هذه:

document.getElementById('<%= Label1.ClientID %>').style.display

من المحتمل ألا يتمكن أي شخص من التلاعب بـ ClientID الخاص بـ Label1 في هذه الحالة، ولكن فقط لكي تكون في الجانب الآمن، قد ترغب في تمرير قيمته من خلال أحد مكتبة AntiXss طُرق:

document.getElementById('<%= AntiXss.JavaScriptEncode(Label1.ClientID) %>').style.display

هذه هي أسهل طريقة وجدتها:

        BtnUpload.Style.Add("display", "none");
        FileUploader.Style.Add("display", "none");
        BtnAccept.Style.Add("display", "inherit");
        BtnClear.Style.Add("display", "inherit");

لدي العكس في الآخر، لذا فهو يتعامل مع عرضهم أيضًا.يمكن أن يتم ذلك في تحميل الصفحة أو كوسيلة لتحديث عناصر التحكم على الصفحة.

إذا انتظرت حتى يتم تحميل الصفحة، ثم قمت بتعيين عرض الزر على لا شيء، فمن المفترض أن ينجح ذلك.ومن ثم يمكنك جعله مرئيًا في وقت لاحق.

تأكد من تعيين الخاصية Visible على true وإلا فلن يتم عرض عنصر التحكم على الصفحة.ثم يمكنك استخدام البرنامج النصي لمعالجته.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top