Wciąż jestem nowy w MVC, więc mam nadzieję, że jest to proste.
Potrzebuję kategorii i podkategorii, potencjalnie wielopoziomowych, i staram się odpowiednio zorganizować mój projekt. W tej chwili używam out-of-the-box projektu MVC w VS2008.
Załóżmy na przykład, że chcę przejść do: http://mysite.com/products/elektronika/komputery/laptopy
Mogę to osiągnąć, umieszczając LaptopsController w moim katalogu Controllers, katalog Latops z różnymi plikami aspx w moich widokach i dodając linię do mojej klasy Global.asax, która mapuje tę konkretną trasę do odpowiedniego kontrolera.
Ale mam nadzieję, że istnieje sposób na automatyczne mapowanie trasy, przy jednoczesnym utrzymaniu uporządkowanej i uporządkowanej struktury katalogów w projekcie, ponieważ będzie wiele różnych kategorii i produktów. W idealnym przypadku w moim projekcie powinny znajdować się katalogi fizyczne dla kontrolerów i widoków, odpowiadające „katalogom” w ścieżce adresu URL. Ale nie wydaje mi się, żeby to działało.
Zapoznałem się z kilkoma artykułami na temat dokonywania poważnych zmian w routingu, ale wolałbym tego nie robić, jeśli to możliwe. Wygląda na to, że byłoby to coś wbudowanego, więc może po prostu czegoś mi brakuje.
Gdybyś mógł wskazać mi właściwy kierunek, byłoby wspaniale.
2 odpowiedzi
Najprawdopodobniej nie potrzebujesz LaptopsController
, tylko ProductsController
. W tym przypadku Electronics/Computers/Laptops
informuje ProductsController
, którą kategorię produktów ma wyświetlić (za pomocą wartości trasy).
JEŚLI masz problemy z routingiem, wypróbuj debugger Haacked routing.
http://haacked.com/archive/2008/03/13/url-routing-debugger.aspx
Jeśli chcesz przechwycić wszystkie informacje o produktach i uzyskać zawartość, możesz wykonać następujące czynności:
routes.MapRoute("Products", "products/{*params}",
new { controller = "Product", action = "Details", params= "" });
public ActionResult Details(string params)
{
// Split the params with '/' as delimiter.
string [] productParams = params.Split('/');
if(productParams.Lengh > 0)
{
var category = productParams.Length > 0 ? productParams[0]: null;
var subCategory = productParams.Length > 1 ? productParams[1]: null;
var detailModel //get model information and build return..
ViewData.Model = detailModel;
Return View("Details");
}
Return View("Error");
//etc.
}
Podobne pytania
Powiązane pytania
Nowe pytania
c#
C # (wymawiane „patrz ostro”) jest językiem programowania wysokiego poziomu, statycznie typowanym, wieloparadygmatowym opracowanym przez firmę Microsoft. Kod C # zwykle jest przeznaczony dla rodziny narzędzi Microsoft .NET i czasów wykonywania, do których należą między innymi .NET Framework, .NET Core i Xamarin. Użyj tego tagu w przypadku pytań dotyczących kodu napisanego w C # lub C # formalnej specyfikacji.
routes.MapRoute("ProductRoute", "Products/{department}/{category}/{product}" new { controller = "Products" });
View(string.Format("{0}/{1}/{2}/{3}", department, category, product, action)
i wydaje się, że działa dokładnie tak, jak chcę. Dziękuję wszystkim.