2010-01-04 43 views
7

Tôi đã xây dựng một ứng dụng ASP.NET MVC một thời gian trước đây, và sau một vài chu kỳ bảo trì, tôi tự hỏi liệu tôi có cách tiếp cận tốt nhất để quản lý nhà nước hay không. Mọi thứ đều hiệu quả, nhưng tôi có cảm giác có một cách tốt hơn.Quản lý nhà nước trong ASP.NET MVC

Trang web dựa trên chức năng tìm kiếm có khá nhiều tùy chọn. Người dùng bắt đầu sử dụng trang web bằng cách điền vào một số tùy chọn tìm kiếm trong biểu mẫu và nhấp vào nút 'tìm kiếm'. Nút này viết với phương pháp kiếm với tất cả các tùy chọn tìm kiếm được định nghĩa là thông số các phương pháp tìm kiếm, ví dụ:

public ActionResult Search(string param1, string param2, string param3, int? param3, long? param4) 

Bây giờ các trang kết quả mà xuất hiện có một số liên kết trên nó, dẫn đến các trang chi tiết khác nhau vv vì tôi cần trạng thái tìm kiếm để được bảo tồn trên trang chi tiết, tôi thấy mình tạo ActionLinks với rất nhiều các thông số ở khắp mọi nơi, chẳng hạn như:

<%=Html.ActionLink("LinkText", "MethodName", new {id="idOfDetailPage", param1=Model.param1, param2=Model.param2, param3=Model.param3, param4=Model.param4}, null)%> 

Hầu hết các giá trị tham số trong mỗi liên kết làm không thay đổi từ trạng thái hiện tại của tìm kiếm, nhưng tôi cần phải vượt qua chúng để có thể tạo các liên kết khác trong trang chi tiết bằng c ví dụ như các tham số tìm kiếm urrent, chẳng hạn như "quay lại kết quả tìm kiếm".

Khi tôi cần phải thêm một tham số tìm kiếm do yêu cầu tính năng mới, tôi thấy mình thay đổi rất nhiều liên kết cũng như bất kỳ phương pháp điều khiển rằng các liên kết dẫn đến. Đây là nơi tôi cảm thấy rằng tôi cần một cách tốt hơn.

Tôi đã nghĩ về việc sử dụng trạng thái phiên để giữ các tham số tìm kiếm, nhưng vì một số lý do nghĩ rằng đây không phải là điều tốt nhất để sử dụng trong ASP MVC và rất tò mò nếu có cách khác, sạch hơn để làm điều này.

Lưu ý: Tôi cũng đã cố gắng một cách tiếp cận mà tôi sử dụng một đối tượng mạnh mẽ gõ trong ActionLink nhưng tôi vẫn cần phải vượt qua các thông số để đối tượng đó để nó không trở nên tốt hơn nhiều.

Bất kỳ ý tưởng nào được đánh giá cao.

Trả lời

1

Sử dụng trạng thái phiên cho loại điều này là một sự phiền toái vì điều này có nghĩa là các trang này không thể được đánh dấu trang và nếu bạn muốn mở nhiều tab, nó bắt đầu lộn xộn.

Bạn có thể tạo ra một lớp SearchParameters mới:

public class SearchParameters 
{ 
    public string Param1 { get; set; } 
    public string Param2 { get; set; } 
} 

sửa đổi hành động của bạn sẽ được

public ActionResult Search(SearchParameters params) 

và sau đó vượt qua trở lại này đến xem qua các dữ liệu xem.

sau đó tầm nhìn của bạn sẽ có thể sử dụng

<%=Html.ActionLink("LinkText", "MethodName", Model) %> 

Nếu bạn đang sử dụng này ở khắp mọi nơi, bạn có thể muốn tạo ra một mở rộng HtmlHelper:

public static class SearchExtensions 
{ 
    public static string SearchLink<TModel>(this HtmlHelper<TModel> helper, string linkText) 
     where TModel : SearchModel, class //required by ASP.NET MVC 
    { 
     return helper.ActionLink(linkText, "MethodName", modelType.ViewData.Model) %> 
    }  
} 

và sau đó tìm kiếm của bạn đơn giản như:

<%=Html.SearchLink("LinkText") %> 
+0

Điều này hoạt động miễn là tôi luôn chuyển các thông số tìm kiếm giống nhau và chỉ tham số tìm kiếm cho hành động ion, chẳng hạn như hành động tìm kiếm. Tuy nhiên tôi gặp rắc rối khi tôi cần truyền dữ liệu bổ sung cho hành động, chẳng hạn như ID của một mục (đối với trang chi tiết).Sau đó, tôi không thể đơn giản chuyển Mô hình đến phương thức trợ giúp Html.ActionLink. Ngoài ra, nhiều liên kết yêu cầu một trong các tham số tìm kiếm được thay đổi nhưng phần còn lại vẫn giữ nguyên, vì vậy với cách tiếp cận này, tôi cần tiếp tục tạo các đối tượng SearchParameters mới. Nó hoạt động nhưng nó bị lộn xộn sau một thời gian. –

+3

Tôi sẽ gắn bó vào và gợi ý rằng tìm kiếm đánh dấu không phải lúc nào cũng là điều tốt để có thể làm - nó phụ thuộc vào bối cảnh và ứng dụng - điều này đặc biệt đúng nếu tìm kiếm có các phụ thuộc không bị lộ trong các tham số. Điều đó nói rằng tôi nghĩ rằng đây là một khái quát tốt (-: – Murph

Các vấn đề liên quan