الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

java script in masterpage

بدأه shamy789 في 5 مارس 2011 · 13 رد · 977 مشاهدة · في ASP.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

لو سمحتو يا جماعه

انا عندى فى صفحة الماستر بيج فى ال head الكود دا

عبارة عن function بتخلينى اعمل ظهور او اخفاء للكنترول

<head runat="server">
    <title>Untitled Page</title>    
    <script type="text/javascript">
        function visible(controlId)
        {
            var control = document.getElementById(controlId);
            if(control.style.visibility == "visible" || control.style.visibility == "")
                control.style.visibility = "hidden";
            else 
                control.style.visibility = "visible";

        }
    </script>

</head>

المشكلة انى مش عارف ازاى استخدم ال function دى جوه صفحة من الصفح اللى عندى

لو ال Default.aspx مثلا فىيها ال java script function وعندى فى الصفحة button واديله ال function بتاعتى ، بتشتغل عليه عادى .

لكن المشكله لما تكون ال function موجودة فى الماستربيح ، ازاى انادى عليها جوه content place holder فى صفحة اخرى

انا دورت كتير بس ملقتش حل ... ارجو حد يساعدنى

#2

ما تم انشاءه ضمن الماستر بيج يستخدم فقط في الماستر بيج .......... لو اردت استخدام الكود الخاص بك ......... قم بانشاء ملف جافا سيكريبت وضع الكود ضمنه .......

وقم باستدعاء الكود من خلال ملف الجافا سيكريبت

قل لمن يحمل هما ****** إن همــــا لا يدوم
:rolleyes: :rolleyes: :clapping: :rolleyes: :rolleyes:

مثلا تفنى المسـرة ***** هكذا تفنى الهموم

#3

شكرا ليـــك يا اخ همام بس ممكن تقولى ازاى اناديه فى الصفحة بتاعتى

عملت Add new item و ضفته

ودا الكود اللى جواه

function chvisible(controlId)
        {
            var control = document.getElementById(controlId);
            if(control.style.visibility == "visible" || control.style.visibility == "")
                control.style.visibility = "hidden";
            else 
                control.style.visibility = "visible";

        }

اناديه ازاى جوه الصفحه بتاعتى

معلش بتعبك معايا

انا دورت ولقيت كود دا بس مش فاهمه

   protected void Page_Load(object sender, EventArgs e)
    {
        Page.ClientScript.RegisterClientScriptInclude("selective", ResolveUrl(@"Scripts\TestScript.js"));
        if (!Master.Page.ClientScript.IsStartupScriptRegistered("alert"))
        {
            Master.Page.ClientScript.RegisterStartupScript
                (this.GetType(), "alert", "insideJS();", true);
        }
    }
#4

بسم الله الرحمن الرحيم

الرابط ده يفيدك ا ن شاء الله

MasterpageAndJavascript.zip

#5

استخدم RegisterClientScriptBlock

  Page.ClientScript.RegisterStartupScript
                (this.GetType(), "alert", "<script type=text/javascript>function........ </script>", true);

وضع السكريبت الذي تريده

واعتقد ان الافضل ان تضع ContentPlaceHolder في الماستر بيج بين <head> </head

<head>
ضع هنا اي سكربت يكون موجود في كل الصفحات 
   <asp:ContentPlaceHolder ID="head" runat="server">
                    </asp:ContentPlaceHolder>

</head>

وفي جميع الصفحات عليك ان تضع كمايلي

<asp:Content ID="headContent1" ContentPlaceHolderID="head" runat="Server">

</asp:Content>

واذا احتجت جافاسكريت تضعه في هذه الحاوية

<asp:Content ID="headContent1" ContentPlaceHolderID="head" runat="Server">

 <script type="text/javascript">
        function visible(controlId)
        {
            var control = document.getElementById(controlId);
            if(control.style.visibility == "visible" || control.style.visibility == "")
                control.style.visibility = "hidden";
            else 
                control.style.visibility = "visible";

        }
    </script>

</asp:Content>

تم تعديل هذه المشاركة بواسطة TareqVB في 6 مارس 2011 في 11:29

#6
bodaman22 كتب:

بسم الله الرحمن الرحيم

الرابط ده يفيدك ا ن شاء الله

اشكرك bodaman

ولكن الكود جوه صفحة Default.aspx مش فاهمه ..... ممكن تشرحه لو تكرمت .

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Text;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        // Here we need to register the client ids to the client, so that the same can be used in the javascript
        // If there are nultiple controls make it by comma seperated..
        RenderJSArrayWithCliendIds(txtTest);
    }

    // This is the method used to register the array of the clientid's as well as the serverid's
    // Also this method registers the function GetClientId, which is used to get the client id provided server id is supplied
    public void RenderJSArrayWithCliendIds(params Control[] wc)
    {
        if (wc.Length > 0)
        {
            StringBuilder arrClientIDValue = new StringBuilder();
            StringBuilder arrServerIDValue = new StringBuilder();

            // Get a ClientScriptManager reference from the Page class.
            ClientScriptManager cs = Page.ClientScript;

            // Now loop through the controls and build the client and server id's
            for (int i = 0; i < wc.Length; i++)
            {
                arrClientIDValue.Append("\"" + wc.ClientID + "\",");
                arrServerIDValue.Append("\"" + wc.ID + "\",");
            }
            // Register the array of client and server id to the client
            cs.RegisterArrayDeclaration("MyClientID", arrClientIDValue.ToString().Remove(arrClientIDValue.ToString().Length - 1, 1));
            cs.RegisterArrayDeclaration("MyServerID", arrServerIDValue.ToString().Remove(arrServerIDValue.ToString().Length - 1, 1));
            // Now register the method GetClientId, used to get the client id of tthe control
            cs.RegisterStartupScript(this.Page.GetType(), "key", "\nfunction GetClientId(serverId)\n{\nfor(i=0; i<MyServerID.length; i++)\n{\nif ( MyServerID == serverId )\n{\nreturn MyClientID;\nbreak;\n}\n}\n}", true);            
        }
    }
}
#7
TareqVB كتب:

استخدم RegisterClientScriptBlock

  Page.ClientScript.RegisterStartupScript
                (this.GetType(), "alert", "<script type=text/javascript>function........ </script>", true);

وضع السكريبت الذي تريده

واعتقد ان الافضل ان تضع ContentPlaceHolder في الماستر بيج بين <head> </head

<head>
ضع هنا اي سكربت يكون موجود في كل الصفحات 
   <asp:ContentPlaceHolder ID="head" runat="server">
                    </asp:ContentPlaceHolder>

</head>

وفي جميع الصفحات عليك ان تضع كمايلي

<asp:Content ID="headContent1" ContentPlaceHolderID="head" runat="Server">

</asp:Content>

واذا احتجت جافاسكريت تضعه في هذه الحاوية

<asp:Content ID="headContent1" ContentPlaceHolderID="head" runat="Server">

 <script type="text/javascript">
        function visible(controlId)
        {
            var control = document.getElementById(controlId);
            if(control.style.visibility == "visible" || control.style.visibility == "")
                control.style.visibility = "hidden";
            else 
                control.style.visibility = "visible";

        }
    </script>

</asp:Content>

اشكرك tareqvb على تعبك

هجرب وارد عليــــك :)

#8

للاسف جربت الطريقة التانية والكود بتاع جافا سكريبت مشتغلش

حطيت فى الماستر بيج الكود دا

<%@ Master Language="C#" AutoEventWireup="true" CodeFile="MasterPage.master.cs" Inherits="MasterPage" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <asp:ContentPlaceHolder id="head" runat="server"> 

        <script type="text/javascript">
        function visible(controlId)
        {
            var control = document.getElementById(controlId);
            if(control.style.visibility == "visible" || control.style.visibility == "")
                control.style.visibility = "hidden";
            else 
                control.style.visibility = "visible";

        }
    </script>


    </asp:ContentPlaceHolder>
    <title>Untitled Page</title>
</head>

وجوه الصفحة Aspx حطيت الكود دا

<%@ Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="Default2" Title="Untitled Page" %>

<asp:Content ID="headContent1" ContentPlaceHolderID="head" runat="Server">

    <script type="text/javascript">
        function visible(controlId)
        {
            var control = document.getElementById(controlId);
            if(control.style.visibility == "visible" || control.style.visibility == "")
                control.style.visibility = "hidden";
            else 
                control.style.visibility = "visible";

        }
    </script>

</asp:Content>

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
    <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>

    <input id="Checkbox1" type="checkbox" onclick="visible('TextBox1')" />
</asp:Content>

مش عارف اعمل ايه :(

لو الطريقة الاولى احسن .... ممكن تقولى الكود دا اكتبه فين واسه معناه

 Page.ClientScript.RegisterStartupScript
                (this.GetType(), "alert", "<script type=text/javascript>function........ </script>", true);
#9

بسم الله الرحمن الرحيم

RenderJSArrayWithCliendIds(txtTest);

ده فى حدث ال load بينادى على sub اللى هو ده

  public void RenderJSArrayWithCliendIds(params Control[] wc)
    {
        if (wc.Length > 0)
        {
            StringBuilder arrClientIDValue = new StringBuilder();
            StringBuilder arrServerIDValue = new StringBuilder();

            // Get a ClientScriptManager reference from the Page class.
            ClientScriptManager cs = Page.ClientScript;

            // Now loop through the controls and build the client and server id's
            for (int i = 0; i < wc.Length; i++)
            {
                arrClientIDValue.Append("\"" + wc.ClientID + "\",");
                arrServerIDValue.Append("\"" + wc.ID + "\",");
            }
            // Register the array of client and server id to the client
            cs.RegisterArrayDeclaration("MyClientID", arrClientIDValue.ToString().Remove(arrClientIDValue.ToString().Length - 1, 1));
            cs.RegisterArrayDeclaration("MyServerID", arrServerIDValue.ToString().Remove(arrServerIDValue.ToString().Length - 1, 1));
            // Now register the method GetClientId, used to get the client id of tthe control
            cs.RegisterStartupScript(this.Page.GetType(), "key", "\nfunction GetClientId(serverId)\n{\nfor(i=0; i<MyServerID.length; i++)\n{\nif ( MyServerID == serverId )\n{\nreturn MyClientID;\nbreak;\n}\n}\n}", true);            
        }
    }

هو هنا بيعرف array علشان ممكن يشتال معه اكتر من كنترول لو انت عاوزه كده

الفكرة هنا انه بدل ما يضع الكود فى string لا وضعه كده و بينادى على من الجافا نفسه من جوه

var TextBox = document.getElementById(GetClientId("txtTest"));

ضعى breakpoint وامشى مع الكود واحدة واحدة راح تفهمى الكود صح

تم تعديل هذه المشاركة بواسطة bodaman22 في 6 مارس 2011 في 12:27

#10

حاسس ان الكود كبير اخويا bodaman

بص كدا .

انا جربت الكود دا بس برده مش عايز يشتغل .............. :wacko: :blush:

<%@ Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="Default2" Title="Untitled Page" %>

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
      <script language="javascript" type="text/javascript">
                function chvisible(controlId) 
                {
                    var control = document.getElementById(controlId);
                    if(control.style.visibility == "visible" || control.style.visibility == "")
                        control.style.visibility = "hidden";
                    else 
                        control.style.visibility = "visible";
                }

</script> 

 <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
  <input id="Button1" type="button" value="button" onclick="chvisible('TextBox1');"/> 


</asp:Content>
#11

للحصول على ID عنصر

<%=Textbox1.ClientID %>

ولا يجوز الاستخدام المباشر Textbox1

فكرة الماستر بيج والطلب هي

عند طلب صفحة الماستر بيج يقوم بتهيئة كود الجافا سكريبت ولكن بدون استخدام وعندما نريد تنفيذه على عنصر فقط عند وجود العنصر بالصفحة يتم تنفيذه

ولهذا يجب وضع مكتبات الجافا سكريبت بالماستر بيج مرة واحدة وله ميزات عدة هذا العمل

سولة التقاط الاخطاء

من الممكن وضع مكتبة ال debug ومن ثم استبدالها بال MIN

كما انه لا يتكرر كتابة الكود بهيدر كل صفحة

In bad state

#12
X-File كتب:

للحصول على ID عنصر

<%=Textbox1.ClientID %>

ولا يجوز الاستخدام المباشر Textbox1

فكرة الماستر بيج والطلب هي

عند طلب صفحة الماستر بيج يقوم بتهيئة كود الجافا سكريبت ولكن بدون استخدام وعندما نريد تنفيذه على عنصر فقط عند وجود العنصر بالصفحة يتم تنفيذه

ولهذا يجب وضع مكتبات الجافا سكريبت بالماستر بيج مرة واحدة وله ميزات عدة هذا العمل

سولة التقاط الاخطاء

من الممكن وضع مكتبة ال debug ومن ثم استبدالها بال MIN

كما انه لا يتكرر كتابة الكود بهيدر كل صفحة

اشكرك xfile

ليا شوية استفسارات بس من فضلك

1- لو عاوز بدل ال html input احط checkbox

زى كدا

<asp:CheckBox ID="CheckBox2" runat="server" />

فى الحالة دى هنادى ال function ازاى ؟؟؟؟

2- لماذا لا يجوز الاستخدام المباشر Textbox1 ؟؟؟؟

يعنى مثلا لو عندى صفحة Aspx عادية وعامل فيها كود السكريبت لما اجى انادى عليه بيشتغل عادى

يعنى ليه لازم اكتب :-

1- <%

2- ClientID

تم تعديل هذه المشاركة بواسطة shamy789 في 7 مارس 2011 في 17:08

#13

نعم يجب وضع ذلك على كل العناصر لانه من الممكن ان يتم توليد الid تلقائيا وبهذا لا نستطيع ان نتحكم به

In bad state

#14

اي اداة تحتاج استخدامها في الجافا سكريبت اطلب ال ClientID لها مثل

CheckBox2.ClientID

هذه المشكلة تم وضع حلول لها في فيجوال استوديو 2010 اي asp.net 4 لكن في في 2008 يجب عليك استخدامها اي استخدام ClientID او طريقة اخرى (لا انصح بها لكنها تعمل)

وهي شغل الموقع وافتح السورس كود للصفحة التي بها الاداة وابحث عن الاداة وستجد اسمها مع الاضافات عليه مثل

contentplaceholder1_panel_checkbox2

فاستخدام هذا الاسم في الجافاسكريبت بدل من checkbox2

مواضيع مشابهة