2010-01-04 3 views
7

몇 시간 전에 ASP.NET MVC 앱을 구축했으며 몇 가지 유지 관리주기를 마친 후에 상태 관리에 가장 적합한 방법을 채택했는지 궁금합니다. 모든 것이 효과가 있지만 더 나은 방법이 있다는 느낌을받습니다.ASP.NET MVC의 상태 관리

사이트는 몇 가지 옵션이있는 검색 기능을 기반으로합니다. 사용자는 양식의 여러 검색 옵션을 채우고 '검색'버튼을 클릭하여 사이트 사용을 시작합니다. 모든 검색 옵션과 검색 방법이 버튼 게시물이 검색 방법에 매개 변수, 예를 들어,로 정의되는 :

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

다양한 세부 정보 페이지로 이어지는 나타 그것의 링크의 번호를 가지고 결과 페이지

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

각 링크에서 매개 변수 값의 대부분은 이렇게 : 나는 세부 정보 페이지에 보존하는 검색 상태를 필요로하기 때문에, 등, 나 자신과 같은 사방에 매개 변수를 많이, 함께 ActionLinks을 만드는 찾을 수 검색의 현재 상태에서 바뀌지는 않지만, c와 함께 세부 정보 페이지에 다른 링크를 만들려면이를 전달해야합니다. 예를 들어 "검색 결과로 돌아 가기"와 같은 실시간 검색 매개 변수.

새로운 기능 요청으로 인해 검색 매개 변수를 추가해야 할 때 많은 링크와 링크가 연결되는 컨트롤러 메소드를 수정하는 경우가 있습니다. 이것은 내가 더 나은 길을 필요로하는 곳입니다.

검색 매개 변수를 유지하기 위해 세션 상태를 사용하려고 생각했지만 ASP MVC에서 사용하는 것이 가장 좋지 않다고 생각하여 어떤 이유로이 작업을 수행하는 또 다른 깨끗한 방법이 있는지 궁금합니다.

참고 : ActionLink에서 강력한 형식의 개체를 사용하는 방법을 시도했지만 그 개체에 매개 변수를 전달해야 훨씬 더 좋아지지 않습니다.

모든 아이디어는 높이 평가됩니다.

답변

1

이러한 종류의 세션 상태를 사용하는 것은 항상 이러한 페이지를 책갈피에 추가 할 수 없으며 둘 이상의 탭을 열어 놓고 싶을 때 불쾌 해지기 시작합니다.

는 새 SearchParameters 클래스를 만들 수 있습니다

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

public ActionResult Search(SearchParameters params) 

하고 다음 뷰를 통해 데이터 뷰에이 다시 전달하는 액션을 수정합니다.

, 당신은 Html 헬퍼 확장 생성하는 것 같아서보기가 다음 사방이를 사용하는 경우

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

을 사용할 수 있어야합니다 : 다음 검색을

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) %> 
    }  
} 

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

나는 항상 동일한 검색 매개 변수와 검색 매개 변수 만 통과하는 한 작동합니다. 이온 (예 : 검색 활동). 그러나 항목의 ID (세부 정보 페이지와 같은)와 같은 작업에 추가 데이터를 전달해야 할 때 문제가 발생합니다.그렇다면 단순히 모델을 Html.ActionLink 도우미 메서드에 전달할 수 없습니다. 또한 많은 링크는 검색 매개 변수 중 하나를 변경해야하지만 나머지는 동일하게 유지해야하므로이 접근법에서는 새로운 SearchParameters 객체를 계속 만들어야합니다. 그것은 작동하지만 잠시 후 지저분 해집니다. –

+3

나는 노를 붙들어 북마크 검색이 항상 할 수있는 좋은 일은 아니라는 것을 제안합니다. 컨텍스트와 응용 프로그램에 달려 있습니다. 검색 결과에 노출되지 않은 종속성이있는 경우 특히 그렇습니다 매개 변수에. 그것은 이것이 훌륭한 일반화라고 생각한다고 (- : – Murph