Сложный URL в C # MVC3 - PullRequest
       1

Сложный URL в C # MVC3

2 голосов
/ 15 февраля 2012

Я новичок в MVC3 и не могу перейти с этой проблемой.Я делаю простой блог с постами, которые разделены на категории, и у каждого поста может быть несколько тегов.Если я показываю сообщения пользователю, у меня там есть страница, где url похож на localhost / Posts / 1, где «1» - номер страницы.Но как я могу это сделать, если я хочу показывать сообщения только из какой-либо категории или с каким-либо тегом?Он находится в формате localhost / Posts / Categories / 1, где «1» - это идентификатор категории или localhost / Posts / Tags / tag1, где «tag1» - это особый тег. Я бы хотел изменить его на формат localhost / Posts./ Page / 1 или localhost / Posts / Categories / 1 / Page / 1 или localhost / Posts / Tags / tag1 / Page / 1, но я действительно не могу узнать, как этого добиться в контроллере.Поэтому мой вопрос: как заставить методы в контроллере принимать эти сложные URL-адреса?

Я думаю, это как-то связано с маршрутизацией, но не смог найти объяснения моей проблемы.

Большое спасибо за любую помощь.

Мой код:

public ActionResult Tags(string id)
{
  Tag tag = GetTag(id);
  ViewBag.IdUser = IDUser;
  if (IDUser != -1)
  {
    ViewBag.IsAdmin = IsAdmin;
    ViewBag.UserName = model.Users.Where(x => x.IDUser == IDUser).First().Name;
  }
  return View("Index", tag.Posts.OrderByDescending(x => x.DateTime));
}

public ActionResult Index(int? id)
{
  int pageNumber = id ?? 0;
  IEnumerable<Post> posts =
            (from post in model.Posts
             where post.DateTime < DateTime.Now
             orderby post.DateTime descending
             select post).Skip(pageNumber * PostsPerPage).Take(PostsPerPage + 1);
  ViewBag.IsPreviousLinkVisible = pageNumber > 0;
  ViewBag.IsNextLinkVisible = posts.Count() > PostsPerPage;
  ViewBag.PageNumber = pageNumber;
  ViewBag.IdUser = IDUser;
  if (IDUser != -1)
  {
    ViewBag.IsAdmin = IsAdmin;
    ViewBag.UserName = model.Users.Where(x => x.IDUser == IDUser).First().Name;
  }
  return View(posts.Take(PostsPerPage));
  }

1 Ответ

2 голосов
/ 15 февраля 2012

Создание новых маршрутов для направления этих шаблонов URL на ваш контроллер (или другой контроллер, в зависимости от ситуации)

http://www.asp.net/mvc/tutorials/older-versions/controllers-and-routing/asp-net-mvc-routing-overview-cs

Например, это определение маршрута

   routes.MapRoute(
                "CategoryPage",                                              // Route name
                "Posts/Categories/{CategoryID}/Page/{PageID}",                           // URL with parameters
                new { controller = "Home", action = "ViewPage", CategoryID = "", PageID="" }  // Parameter defaults
            );

Подхватится этим действием в HomeController:

public ActionResult ViewPage(int CategoryID, int PageID)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...