2010-01-04 26 views
7

Bir süre önce bir ASP.NET MVC uygulaması oluşturdum ve birkaç bakım döngüsünden sonra devlet yönetimine en iyi yaklaşımı kullanıp kullanmadığımı merak ediyorum. Her şey çalışıyor, ama daha iyi bir yol olduğunu hissediyorum.ASP.NET MVC'deki durum yönetimi

Site, birkaç seçeneğe sahip bir arama işlevselliğine dayanmaktadır. Bir kullanıcı siteyi bir formda bir dizi arama seçeneğini doldurarak ve 'ara' düğmesini tıklayarak kullanmaya başlar. Tüm arama seçenekleri ile ara yöntemine Bu düğme mesajlar Arama yöntemlerine parametreler, örneğin olarak tanımlanmaktadır:

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

çeşitli detay sayfalarına yönlendiren, gösterir Üzerinde bağlantıların bir numarası vardır sonuçları sayfası

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

her bağlantı parametre değerlerinin çoğu yapın: Ben ayrıntı sayfasındaki korunacak arama devlet gerektiğinden, vb, kendimi gibi her yerde parametrelerin sürü ile ActionLinks oluştururken bulmak aramanın mevcut durumundan değişmez, ancak detay sayfasında diğer linkleri oluşturabilmek için bunları geçmem gerekir. Örneğin, "arama sonuçlarına dön" gibi eş zamanlı arama parametreleri.

Yeni bir özellik isteği nedeniyle bir arama parametresi eklemem gerektiğinde, kendimi birçok bağlantıyı ve bağlantıların yol açtığı Denetleyici yöntemlerini değiştirmeyi buluyorum. Daha iyi bir yola ihtiyacım olduğunu düşündüğüm yer burası.

Arama parametrelerini tuttuğunuz için oturum durumunu kullanma hakkında düşündüm, ancak bunun bir nedeni, ASP MVC'de kullanmanın en iyi şey olmadığını düşündüm ve bu yüzden bunu yapmak için daha temiz bir yöntem varsa merak ediyorum.

Not: Ayrıca, ActionLink'te güçlü bir şekilde yazılan bir nesne kullandığım bir yaklaşım denedim, ancak yine de bu nesneye daha iyi gitmemesi için parametrelere geçmem gerekiyor.

Herhangi bir fikir takdir edilmektedir.

cevap

1

Oturum durumunun bu tür bir şey için kullanılması, bu sayfaların yer işaretinin kullanılamayacağı ve birden fazla sekme açmak istediğinizde dağınıklığa neden olduğu için bir sıkıntıdır.

Yeni SearchParameters sınıf oluşturabilir:

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

public ActionResult Search(SearchParameters params) 

olmak ve daha sonra görünüm verileri üzerinden görünümüne bu geri pas için Eylem değiştirin.

, bir HtmlHelper Uzantısı oluşturmak isteyebilirsiniz görünümünüzü o zaman her yerde bu kullanıyorsanız

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

kullanmak mümkün olmalıdır: o zaman aramanızı

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

ve şu kadar basit:

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

Bu, aynı arama parametrelerini ve yalnızca arama parametrelerini her zaman geçirdiğim sürece çalışır İyon, arama eylemi gibi. Ancak, bir öğenin kimliği gibi (detay sayfası için olduğu gibi) eyleme ek veri iletmem gerektiğinde başım belaya girer.Daha sonra modeli sadece Html.ActionLink yardımcı yöntemine geçiremiyorum. Ayrıca, birçok bağlantı, arama parametrelerinden birinin değiştirilmesini gerektiriyor ancak geri kalanı aynı kalıyor, dolayısıyla bu yaklaşımla yeni SearchParameters nesnelerinin oluşturulmasına devam etmem gerekiyor. Çalışır ama bir süre sonra dağınık olur. –

+3

Cevherimi yapıştıracağım ve yer imi aramalarının her zaman yapabilmek için iyi bir şey olmadığını - daha ziyade içeriğe ve uygulamaya bağlı olduğunu - bu özellikle arama sonuçlarının açıkta kalmadığı durumlarda doğrudur. parametrelerde. Bence bunun iyi bir genelleme olduğunu düşünüyorum (-: – Murph