سؤال

ولدي عمل تسمى قائمة تبين نتائج البحث. ويستقبل المعلمات من خلال سلسلة استعلام مواقع المعلومات لأنها اختيارية. بلدي طريقة التوقيع يبدو مثل هذا:

public ActionResult List(List<int> categoryIDs, string school, int? stateID, int? page)

وCategoryIDs هي متعددة حدد مربع وأنا أفعل كل شيء على طلب GET. ما عليك القيام به هو إنشاء وصلة من وجهة نظري إلى الصفحة التالية ولكن الإبقاء على معلمات البحث نفسها. أعرف أنني أستطيع أن بناء وصلة باليد ولكن من الممكن استخدام أي من المدمج في أسلوب التوجيه وخصوصا عندما يكون لديك ليكون مهيأ مثل "؟ معرف_الفئة = 1 & معرف_الفئة = 2 & معرف_الفئة = 3" لتكون ملزمة لقائمة؟ وcategoryIDs

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

المحلول

وأعتقد أن هناك لا الزائد ActionLink التي تساعدك على القيام بذلك عن طريق الافتراضي. تحتاج إلى ملء المثال RouteValueDictionary مع المعلمات التي تريد إدراجها.

لقائمة الفئة، في محاولة ق / ر مثل categoryIDs=2,3,4,5 وما إلى ذلك منذ لا يسمح مفاتيح تكرار في RouteValueDictionary. بعد ذلك، في طريقة العمل سوف تحتاج إلى تحليل السلسلة إلى قائمة صحيح.

نصائح أخرى

ويجب أن تكون قادرة على القيام بذلك:

يجب أن يتم تمرير

وجميع القيم الحالية في افتراضيا. ويهمني أن تحاول ذلك على الرغم من خارج للتأكد من أنا الرجوع إلى الحمل الزائد الصحيح.

وأود أن تمرير كائن كمعلمة لبحث الإجراءات، ومن ثم تمرير الكائن المعلمة إلى طريقة العرض. حتى مع بعض الرموز في وحدة التحكم الخاصة بك مثل هذا (لاحظ أنا باستخدام الطبقة PagedList روب Conery ل ):

public class SearchParameters {
    public string School { get; set; }
    public int? StateID { get; set; }
    public int? Page { get; set; }

    public SearchParameters GetPage(int page) {
        return new SearchParameters {
            School = School,
            StateID = StateID,
            Page = page
        };
    }
}

public class SearchViewModel {
    public PagedList<[YourResultType]> Results { get; set; }
    public SearchParameters Parameters { get; set; }
}

// ...

public ActionResult Search(SearchParameters parameters) {
    IQueryable<[YourResultType]> query;
    // ... do some stuff to get your search results

    return View("Search", new SearchViewModel {
        Results = query.ToPagedList(parameters.Page - 1), 15),
        Parameters = parameters
    });
}

وهكذا رأي بحثك يرث من عام ViewPage بإعلان الصفحة مثل هذا:

<%@ Page ... Inherits="ViewPage<SearchViewModel>" %>

وبعد ذلك في عرض البحث، يمكنك أن تفعل شيئا من هذا القبيل ...

<% for(int i = 0; i < Model.Results.TotalPages; i++) { %>
    <%= Html.ActionLink(i + 1).ToString(), "Search",
        Model.Parameters.GetPage(i + 1)) %>
<% } %>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top