PDA

View Full Version : سوال: مشکل با Routing با دو پارامتر



ahmadhasani
جمعه 05 مهر 1392, 11:59 صبح
سلام. دوستان من به یه مشکلی خوردم. سایتی که طراحی کردم ، یه لیست محصولات داره با دوتا پارامتر. Colls و SubColls. برای آوردن لیست محصولات ، یک صفحه دارم به اسم List.aspx که بنا به لیستی که لازم دارم ، بهش پارامتر دهی می کنم. مثلآ اگه لیست مجموعه ها رو بخوام ، میشه List.aspx?CollID=2 و اگه لیست زیرمجموعه های این مجموعه رو بخوام ، میشه List.aspx?CollID=2&SubCollID=5. اگه هم لیست کلی رو بخوان ، میشه List.aspx. حالا من میخوام روی این سیستم ، Url Routing رو اجرا کنم. کاری که کردم این بود:
کدهای Global.asax:

void RegisterRoutes(RouteCollection routes)
{
routes.MapPageRoute(
"CollsList",
"List/{collid}/{subcollid}",
"~/New/List.aspx",
false,
new RouteValueDictionary { { "subcollid", string.Empty } }
);
}

Application_Start:
RegisterRoutes(RouteTable.Routes);


کدهای Page_Load صفحه List.aspx:

string CollID = Page.RouteData.Values["collid"] as string;
string SubCollID = Page.RouteData.Values["subcollid"] as string;


کوئری استرینگ صفحه List.aspx:

<asp:SqlDataSource ID="dsShoes" runat="server" ConnectionString="<%$ ConnectionStrings:ShoesConnectionString %>"
SelectCommand="SELECT query WHERE (Shoes.Shoe_CollID = @collid or @collid = 0) and (Shoes.Shoe_SubCollID = @subcollid or @subcollid = 0)">
<SelectParameters>
<asp:RouteParameter Name="CollID" RouteKey="collid" />
<asp:RouteParameter Name="SubCollID" RouteKey="subcollid" />
</SelectParameters>
</asp:SqlDataSource>


البته کد Select چون طولانی بود ننوشتم و فقط به آوردن شرط ها بسنده کردم.
درضمن من از DataList برای لیست کردن محصولاتم استفاده می کنم. حالا مشکل اینه که تو این حالت با Routing ، فقط در صورتی که هردو پارامتر آورده بشه (List/5/13) صفحه رو درست لود میکنه. در غیر این صورت ، (یعنی List/5 و List) اصلآ صفحه رو باز نمیکنه و اگر هم باز کنه ، هیچ محصولی رو لود نمیکنه! چکار کنم؟

ahmadhasani
جمعه 05 مهر 1392, 14:35 عصر
واقعآ کسی از اساتید نمیدونه؟

mahdioo12194
جمعه 05 مهر 1392, 16:04 عصر
چند تا روت بساز ببین درست می شه؟!!!



routes.MapPageRoute( "CollsList",
"List/{collid}/{subcollid}",
"~/New/List.aspx",
false,
new RouteValueDictionary { { "subcollid", string.Empty } }
);


routes.MapPageRoute( "CollsList",
"List/{collid}",
"~/New/List.aspx",
false,
new RouteValueDictionary { { "subcollid", string.Empty } }
);

routes.MapPageRoute( "CollsList",
"List",
"~/New/List.aspx",
false,
new RouteValueDictionary { { "subcollid", string.Empty } }
);