سؤال

لدي عدد قليل من قيم المسار الفارغة التي أريدها في سلسلة الاستعلام:

var routeValues = new RouteValueDictionary();
routeValues.Add("one", "");
routeValues.Add("two", null);
routeValues.Add("three", string.Empty);

إذا قمت بعد ذلك بتمريرها إلى UrlHelper.RouteUrl() فهو يتجاهل كافة القيم وتكون سلسلة الاستعلام التي تم إنشاؤها فارغة.ومع ذلك، مثل عناوين المواقع /?one=&two=&three= صالحة تماما.كيف أقوم بذلك؟

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

المحلول

تم تضمين هذا السلوك في فئة التوجيه الافتراضية.يستدعي الأسلوب ParsedRoute.Bind() حيث يقوم بالتحقق:

if (IsRoutePartNonEmpty(obj2))
{
    acceptedValues.Add(key, obj2);
}

الذي يفعل هذا:

private static bool IsRoutePartNonEmpty(object routePart)
{
    string str = routePart as string;
    if (str != null)
    {
        return (str.Length > 0);
    }
    return (routePart != null);
}

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

  1. مسار الفئة الفرعية وتجاوز GetVirtualPath()، واستبدال ParsedRoute.Bind() بتطبيق مخصص.
  2. فئة فرعية RouteBase وإنشاء تطبيق مسار مخصص.

أعتقد أن الخيار الثالث هو ترك الأمر بمفرده، كما أشار آخرون إلى أن هذه ليست مشكلة حقًا نظرًا لأن وجود معلمة فارغة في سلسلة الاستعلام له قيمة ضئيلة أو معدومة.

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