PDA

View Full Version : سوال: مشکل عجیب با منوی داینامیک



saeid6366
شنبه 09 شهریور 1392, 14:01 عصر
با سلام خدمت دوستان.
من یک منوی داینامیک با استفاده از xml و روشی که دوستان در تالار توضیح دادن ساختم. همه چیز درسته ولی وقتی یک منو یا زیر منوی جدید در صفحه مدیریت می سازم و بعد به صفحه نخست میرم تغییرات اعمال نشده!!!!! ولی وقتی به صفحات دیگه میرم منو تغییر می کنه در حالی که هیچ تفاوتی نیست چون منو در مستر پیج ساخته میشه و به همه صفحات اعمال میشه. البته بعد از یک مدت و چند بار اجرا کردن برنامه درست میشه!!!!!
دوستان کسی نمیدونه مشکل از چیه؟ اگه کمکم کنید ممنون میشم خیلی به جوابش احتیاج دارم.

saeid6366
شنبه 09 شهریور 1392, 15:20 عصر
دوستان تو رو خدا کمک کنین
این تابع دریافت منو از پایگاه داده است که در load مسترپیج فراخوانی میشه:
protected void getmymenu()
{
DataSet ds = new DataSet();
string connStr = MyConnectionString.ConnectionString;
SqlConnection conn = new SqlConnection(connStr);


string sql = string.Format("Select * from Menu where Admin=0 Order By MenuID", "");
conn.Open();
SqlDataAdapter da = new SqlDataAdapter(sql, conn);
da.Fill(ds);

da.Dispose();
conn.Close();


ds.DataSetName = "Menus";
ds.Tables[0].TableName = "Menu";
DataRelation relation = new DataRelation("ParentChild",
ds.Tables["Menu"].Columns["MenuID"],
ds.Tables["Menu"].Columns["ParentID"],
true);

relation.Nested = true;
ds.Relations.Add(relation);

xmlDataSource.Data = ds.GetXml();
xmlDataSource.DataBind();
if (Request.Params["Sel"] != null)
Page.Controls.Add(new System.Web.UI.LiteralControl(Request.Params["Sel"]));

Menu1.DataSource = xmlDataSource;
Menu1.DataBind();

Menu1.Font.Name = "Tahoma";
Menu1.Orientation = System.Web.UI.WebControls.Orientation.Horizontal;
}

اینم از کد مربوط به فایل TransformXSLT.XSL:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" encoding="utf-8"/>
<!-- Find the root node called Menus
and call MenuListing for its children -->
<xsl:template match="/Menus">
<MenuItems>
<xsl:call-template name="MenuListing" />
</MenuItems>
</xsl:template>

<!-- Allow for recusive child node processing -->
<xsl:template name="MenuListing">
<xsl:apply-templates select="Menu" />
</xsl:template>

<xsl:template match="Menu">
<MenuItem>
<!-- Convert Menu child elements to MenuItem attributes -->
<xsl:attribute name="Text">
<xsl:value-of select="Text"/>
</xsl:attribute>

<xsl:attribute name="ImageUrl">
<xsl:value-of select="gifImage"/>
</xsl:attribute>


<xsl:attribute name="ToolTip">
<xsl:value-of select="Description"/>
</xsl:attribute>


<xsl:attribute name="NavigateUrl">
<xsl:text></xsl:text>
<xsl:value-of select="MenuUrl"/>
</xsl:attribute>

<!-- Call MenuListing if there are child Menu nodes -->
<xsl:if test="count(Menu) > 0">
<xsl:call-template name="MenuListing" />
</xsl:if>
</MenuItem>
</xsl:template>
</xsl:stylesheet>

در HTML دیتاسورس منو هم این طوری تعریف شده:
<asp:XmlDataSource ID="xmlDataSource" TransformFile="~/TransformXSLT.xsl"
XPath="MenuItems/MenuItem" runat="server"/>

saeid6366
شنبه 09 شهریور 1392, 17:19 عصر
25 بار مشاهده ولی بدون پاسخ:ناراحت:
یعنی هیچ کس راه حلی به ذهنش نمیرسه؟

saeid6366
شنبه 09 شهریور 1392, 20:10 عصر
اون طوری که فهمیدم مشکل دقیقا در قسمت کد:
xmlDataSource.Data = ds.GetXml(); xmlDataSource.DataBind();
if (Request.Params["Sel"] != null)
Page.Controls.Add(new System.Web.UI.LiteralControl(Request.Params["Sel"]));

Menu1.DataSource = xmlDataSource;
Menu1.DataBind();

هست یعنی در ]xmlDataSource.Data دقیقا داده ها رو به صورت xml درست منطبق با اطلاعات پایگاه داده است ولی وقتی در datasource منو میریزم، آیتم های منو مطابق با داده های xmlDataSource.Data نیست و کمتره!!!!
بازم کسی نیست که بتونه کمک کنه؟

saeid6366
یک شنبه 10 شهریور 1392, 11:58 صبح
دوستان با تشکر از کمک شایانی که فرمودید! من مشکلم حل شد برای اونایی که مشکلی شبیه به من دارن خواستم بگم من روش ایجاد منوی داینامیک رو عوض کردم و طبق سایت زیر عمل کردم و جواب گرفتم :لبخندساده:
http://www.codeproject.com/Tips/354696/Dynamically-populating-menu-items-from-the-databas
البته علت مشکل خودمو نفمیدم فکر می کنم کلا منوی asp با xml مشکل داره