PDA

View Full Version : سوال: مشکل در تغییر آیدی شی در مستر پیج



khorsandreza
پنج شنبه 06 آبان 1389, 16:40 عصر
سلام دوستان:
یک مشکل خاصی برام پیش آمده وقتی از مستر پیج استفاده میشه موقع بارگذاری بخشی ار ایدی ها اشیاء تغییر پیدا می کنه مثلا suckertree1 به ctl00_suckertree1 عوض میشه که ایجاد مشکل میکنه البته من مشکل عمده را در تایپک http://www.barnamenevis.org/forum/showthread.php?t=256182
مطرح کردم ولی فکر می کنم این بخاطر مستر پیج است و قطعا کد یا دستوری هست که مانع از این کار بشود
با تشکر
یا علی

adelisardo
پنج شنبه 06 آبان 1389, 17:50 عصر
با سلام
دوست عزیز این موضوعی که شما می فرمایید کاملا در ASP.NET یک موضوع طبیعی یا به قولی ارگانیک است !!!
این دو Id کاملا با هم متفاوت هستند
اولین مورد Id های کنترل ها در ASP.NET :
از این Id برای دسترسی به کنترل ASP.NET در کد زبان مورد نظر استفاده می شه ( Server Side )
دومین مورد Id های مربوط به تگ های HTML :
از این Id معمولا برای دسترسی به تگ مورد نظر در جاوا اسکریپت استفاده میشه و برای نوشتن کد های CSS کلاینت ساید ( Client Side )
زمانه که صفحه ASP.NET ترجمه و خروجی آن به صورت HTML استخراج و به سمت کاربر ارسال شد Id های کنترل های ASP.NET به ID تگ های HTML تبدیل می شود که برای نامگذاری این ID ها از یک ساختار درختی استفاده می کند .
شما نه تنها در موردی که خود شما با آن مواجه شدید پیش می آید ، حتی اگر در یک صفحه معمولی ( بدون استفاده از مستر پیچ ) کنترل های خود را درون یک کنترل Panel ( کنترل ASP.NET ) قرار دهید با همین موضوع مواحه خواهید شد .
لطفا بفرمایید که می خواید با این ID چکار کنید تا بتونم بیشتر کمکتون کنم
با احترام

khorsandreza
پنج شنبه 06 آبان 1389, 17:59 عصر
با سلام
دوست عزیز این موضوعی که شما می فرمایید کاملا در ASP.NET یک موضوع طبیعی یا به قولی ارگانیک است !!!
این دو Id کاملا با هم متفاوت هستند
اولین مورد Id های کنترل ها در ASP.NET :
از این Id برای دسترسی به کنترل ASP.NET در کد زبان مورد نظر استفاده می شه ( Server Side )
دومین مورد Id های مربوط به تگ های HTML :
از این Id معمولا برای دسترسی به تگ مورد نظر در جاوا اسکریپت استفاده میشه و برای نوشتن کد های CSS کلاینت ساید ( Client Side )
زمانه که صفحه ASP.NET ترجمه و خروجی آن به صورت HTML استخراج و به سمت کاربر شد Id های کنترل های ASP.NET به ID تگ های HTML تبدیل می شود که برای نامگذاری این ID ها از یک ساختار درختی استفاده می کند .
شما نه تنها در موردی که خود شما با آن موجه شدید پیش می آید ، حتی اگر در یک صفحه معمولی ( بدون استفاده از مستر پیچ ) کنترل های خود را درون یک کنترل Panel قرار دهید با همین موضوع موحه خواهید شد .
لطفا بفرمایید که می خواید با این ID چکار کنید تا بتونم بیشتر کمکتون کنم
با احترام
با سلام
ممنون مشکل را باز کردید درست من در صفحه مستر یک پنل قرار دادم و منوها را در داخل همین پنل گذاشتم
اگه از پنل خارج کنم دیگر این شکل نخواهد شد؟
مطلب دوم اگر شما به تایپک Html مراجعه کردین من این کار را در یک فایل (default.aspx) انجام دادم و انجا هم دقیقا داخل پنل است ولی مشکلی ایجاد نکرده
-------------
گزارش بعد از تست
------------------------
تمام روش را تست کردم حتی صرفا در مستر پیچ ساده قرار دادم بعد از کمپابل هما اتفاق افتاد فرقی نکرد .
من یک بار مطلبی را از DelphiAsstan دیده بودم که در مورد همین مشکل بود ولی هر چه میگردم پیدا نمیکنم ظاهر مشکل را یجوری حل کرده بود

khorsandreza
پنج شنبه 06 آبان 1389, 18:19 عصر
و اما مشکل :
من با استفاده از CSS و دیتابیس طراحی منو کردم و کاربر خودش نسبت به نیازش منو را طراحی و ... انجام می دهد حالا امروز داشتم یک تغییر روی پروژه انجام میدادم (مسترپیج) اضافه کردم ولی این مشکل پیش آمده موقع کامپایل خطا میده شکل را ببینید>

adelisardo
پنج شنبه 06 آبان 1389, 18:23 عصر
دوست عزیز تست شما کاملا درسته من هم تست کردم و همین نتیجه رو گرفتم ، شما این رو هم تست کنید که کنترل خود را توی یک Web User Control قرار دهید این USER Control رو به صفحه خود اضافه کنید و می بینید که همین اتفاق می افته .
دلیل این نام گذاری به صورت درختی ( از پدر به فرزند ) اینه که مثلا شما همین کنترل رو 2 بار توی یک صفحه استفاده کنید اگر این شیوه نام گذاری نباشه اونوقت ما دو Id تکراری توی صفحه خواهیم داشت .
همین مسئله در مستر پیچ هم وجود داره شما اگر توی خود مستر پیچ کنترلی رو اضافه کنید و توی صفحه همین کنترل را با نام های یکسان ، اگه این حالت نباشه باز هم همین مشکل پیش میاد .
برای دسترسی به نام تولید شده می تونید از مشخصه ClientID استفاده کنید .
با احترام

adelisardo
پنج شنبه 06 آبان 1389, 18:29 عصر
شما برای دسترسی به Client Id توی کد HTML ، از کد زیر استفاده کنید

<%= suckertree1.ClientID %>

khorsandreza
پنج شنبه 06 آبان 1389, 19:33 عصر
یک ایده
بنظر شما اگر من این منو را از طریق iframe ایجاد بکنم مشکل حل میشود؟

khorsandreza
پنج شنبه 06 آبان 1389, 19:37 عصر
شما برای دسترسی به Client Id توی کد HTML ، از کد زیر استفاده کنید

<%= suckertree1.ClientID %>

یک مثال میتونید برام اماده کنید؟

adelisardo
پنج شنبه 06 آبان 1389, 19:48 عصر
دوست عزیز آخه من دقیقا نمی دونم شما دارید به چه شکلی عمل می کنید که راهنمایتون کنم ، اگه بتونید صفحه مستر پیچ و کدی رو که برای اون نوشتین برای من ارسال کنید ، بیشتر بتونم کمکتون کنم .

khorsandreza
پنج شنبه 06 آبان 1389, 20:06 عصر
دوست عزیز آخه من دقیقا نمی دونم شما دارید به چه شکلی عمل می کنید که راهنمایتون کنم ، اگه بتونید صفحه مستر پیچ و کدی رو که برای اون نوشتین برای من ارسال کنید ، بیشتر بتونم کمکتون کنم .

من اطلاعات منو را از دیتا بیس میخونم
کل ساختار برنامه پیوست میباشد
بعد از ایجاد جدول در اس کیو ال منوی مثالی را از ADD_DATA.SQL به جدول اضافه شود

adelisardo
پنج شنبه 06 آبان 1389, 20:57 عصر
دوست عزیز شما یه فایل javascript دارید با نام MVFJS.js در این فایل در خط اول شما یه متغیری تعریف کردید :


var menuids = ["suckertree1"] //Enter id(s) of SuckerTree UL menus, separated by commas
این خط کد رو از داخل این فایل حذف کنید و به این شکل به صفحه MasterPage ( جایی که تک DIV منو رو تغریف کردید ) خود اضافه کنید مشکلتان حل می شود :
کد مورد نظر :



var menuids = ["<%= suckertree1.ClientID %>"]; //Enter id(s) of SuckerTree UL menus, separated by commas
کل کد صفحه :


<%@ Page Language="C#‎‎" AutoEventWireup="true" CodeFile="MenuForm.aspx.cs" Inherits="MenuForm" %>

<!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">
<script src="MVFJS.js" type="text/javascript"></script>
<link href="MenuCss.css" rel="stylesheet" type="text/css" />
<title></title>
<script type="text/javascript">
//Is here
var menuids = ["<%= suckertree1.ClientID %>"]; //Enter id(s) of SuckerTree UL menus, separated by commas

function pageLoad() {
}

</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:ScriptManager ID="ScriptManager1" runat="server" />
<br />
<div align="center" class="suckerdiv" dir="rtl" style="font-family: Tahoma; font-size: 9pt;">
<ul id="suckertree1" runat="server" dir="ltr">
</ul>
</div>
</div>
</form>
</body>
</html>

باز هم اگر سوالی داشتید در خدمتم .
موفق باشید