سؤال

ولدي تطبيق ASP.NET نشرت أصلا إلى صافي 1.1 الإطارية بشأن خادم ويندوز 2000 الذي أنا باستخدام الآن على Windows 2008 Server باستخدام 2.0.50727. نحن نستخدم تيلدا (~) لحل لمسار مطلق في العديد من مجالات التطبيق ويعمل لأشياء مثل آسيا والمحيط الهادئ: ضوابط الارتباط التشعبي (مع التشغيل في علامات الخادم)، ولكن لدينا ضوابط منضم DataGrid التي تستخدم HyperLinkColumns لخلق الروابط على أساس القيم ID عاد من قاعدة البيانات الخاصة بنا، تيلدا هو الحصول على كتب على الصفحة.

وهذا الرمز:

HyperLinkColumn oLink = new HyperLinkColumn();
oLink.DataNavigateUrlField = "IdField";
oLink.DataNavigateUrlFormatString = "~/Here{0}.aspx";

ويتم إلقاء هذه إلى الصفحة:

<a href="~/Here171201.aspx">

وماذا تغير بين الإصدارات من إطار IIS أو صافي يمكن أن تسبب هذه الوظيفة لم يعد يعمل؟ تيلدا تم حل بالتأكيد في 1.1 - لدي نفس الرمز المحدد نشرها على خوادم إطار عشرات 1.1 في منظمتنا. وللأسف، فإن الطبقة التي تضع DataNavigateUrlFormatString لا يكون الوصول إلى الصفحة، ولذا فإنني سوف تضطر إلى القيام ببعض kludging لإدراج العمل Page.ResolveUrl حول ...

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

المحلول

وأنا لست على علم بأي شيء تغير، ولكن أنا لا أستعمل HyperLinkColumns (انا افضل السيطرة التي تنص العمود قالب) لذلك أنا لم بحثت عن أية تغييرات.

وإمكانية واحدة كوسيلة مساعدة الفرقة المثل هو تغيير هذا السطر:

oLink.DataNavigateUrlFormatString = "~/Here{0}.aspx";

وعلى هذا:

oLink.DataNavigateUrlFormatString = Page.ResolveUrl("~/Here{0}.aspx"); 

إذا أسعفتني الذاكرة كان هناك بعض المشاكل عند الذهاب الى الصفحات الرئيسية واستخدام '~' من عناصر تحكم المستخدم، لكنه تم منذ بعض الوقت وأنا أقرأ أي شيء من هذا القبيل.

نصائح أخرى

وأنا لا أعتقد أن HyperlinkColumn من DataGrid قابلة للحل URL تلقائيا إلى مسار مطلق. IIRC، الخاصية DataNavigateUrlFormatString يدعو داخليا String.Format() فقط على شكل الموردة. هل أنت متأكد من هذا العمل بشكل صحيح على .NET Framework 1.1؟ IIRC، .NET Framework 1.1 لم يكن لديك قرار URL التلقائي القائم على تيلدا.

في رأيي، يجب عليك استخدام الحل الذي قدمه ستيفن (دعوة Page.ResolveUrl يدويا).

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