أسب.نت:استخدام System.Web.UI.Control.ResolveUrl() في وظيفة مشتركة/ثابتة

StackOverflow https://stackoverflow.com/questions/26796

سؤال

ما هي أفضل طريقة لاستخدام ResolveUrl() في وظيفة مشتركة/ثابتة في Asp.Net؟الحل الحالي لـ VB.Net هو:

Dim x As New System.Web.UI.Control
x.ResolveUrl("~/someUrl")

مسخ#:

System.Web.UI.Control x = new System.Web.UI.Control();
x.ResolveUrl("~/someUrl");

لكنني أدرك أن هذه ليست أفضل طريقة لتسميتها.

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

المحلول

نصائح أخرى

تجدر الإشارة إلى أنه على الرغم من أن System.Web.VirtualPathUtility.ToAbsolute مفيد جدًا هنا، إلا أنه كذلك لا بديل مثالي لـ Control.ResolveUrl.

هناك اختلاف مهم واحد على الأقل:يتعامل Control.ResolveUrl مع سلاسل الاستعلام بشكل جيد للغاية، ولكنه يتسبب في قيام VirtualPathUtility بطرح HttpException.يمكن أن يكون هذا محيرًا تمامًا في المرة الأولى التي يحدث فيها، خاصة إذا كنت معتادًا على الطريقة التي يعمل بها Control.ResolveUrl.

إذا كنت تعرف البنية الدقيقة لسلسلة الاستعلام التي تريد استخدامها، فسيكون من السهل التعامل معها بما يكفي، أي:

public static string GetUrl(int id)
{
    string path = VirtualPathUtility.ToAbsolute("~/SomePage.aspx");
    return string.Format("{0}?id={1}", path, id);
}

...ولكن إذا تم تمرير سلسلة الاستعلام من مصدر غير معروف، فستحتاج إلى تحليلها بطريقة ما.(قبل أن تتعمق في ذلك، لاحظ أن System.Uri قد يكون قادرًا على القيام بذلك نيابةً عنك).

أميل إلى استخدام HttpContext.Current للحصول على الصفحة، ثم تشغيل أي طرق للتحكم في الصفحة/الويب خارج ذلك.

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