2010-09-20 5 views
3

Эй, еще один новичок здесь, просто играя с .NET MVC. Моя главная задача состоит в том, чтобы иметь несколько полу-статические страницы на URL, как:.NET MVC Explicit Views

  • /об/
  • /о/контакты/
  • /о/работы/

Я с помощью контроллера для этого называется статическим и имеет следующий маршрут прикрепленный:

routes.MapRoute(
    "About", 
    "about/{id}", 
    new { controller = "Static", action = "Index", id = UrlParameter.Optional } 
); 

Это, кажется, работает хорошо, как у меня есть статический регулятор с индексным методом ш hich использует оператор switch, чтобы определить, какая страница должна быть просмотрена. Я использую функцию RedirectToAction() для вызова других действий контроллера Static для отображения страниц с другими видами. Мои взгляды:

  • /Static/About.aspx
  • /Static/Contacts.aspx
  • /Static/Jobs.aspx

Этот метод, кажется, работает хорошо, но то, что я не нравится, что это перенаправление, поэтому просмотр/контакты/контакты я получаю перенаправление на/Static/Contacts, что не то, что я действительно хотел бы видеть в URL-адресе.

Так что мой вопрос: что это за правильный способ? И есть ли способ явно вызвать определенное представление из моего действия «Индекс»?

Спасибо, ~ К.

+0

+1 хороший вопрос для статических маршрутов. –

ответ

3

Не делайте редирект. Вместо использования оператора switch в действии Index, выполните отдельное действие для каждой страницы (например, About, Contacts, Job), каждый из которых имеет собственное представление.

Static Вашего контроллер может выглядеть примерно так:

public ActionResult Index() 
{ 
    return View(); 
} 

public ActionResult About() 
{ 
    return View(); 
} 

public ActionResult Contacts() 
{ 
    return View(); 
} 

public ActionResult Jobs() 
{ 
    return View(); 
} 

И если вам нужно сделать какую-либо обработку, специфичной для Contacts или Jobs, это может быть сделано в рамках их соответствующих действий.

явно вызвать определенный вид:

return View("ViewName"); 

Есть семь перегрузок для метода View(). Ряд которые позволяют передать модель:

return View("ViewName", Model); 
+0

Спасибо, ваши ответы были правильными, и, возможно, мой вопрос не был. Я использовал ваши предложения для создания моего контроллера Static и имел действия About, Contacts and Jobs, перенаправил их, и все это, похоже, работает нормально. Обратите внимание только на верхние регистры в URL;) – kovshenin

+0

Возможно, еще один вопрос о явном вызове представления - как вызвать ящик явно и передать ему некоторую модель View? – kovshenin

+0

@kovshenin: Извините. Это должно быть 'return View (« ViewName »)'. Я отредактирую ответ выше. Что касается URL-адресов верхнего регистра, почему вы обеспокоены? Я предполагаю, что это работает на IIS, который имеет нечувствительные к регистру URL. 'http: // yourdomain.com/About' будет обрабатываться так же, как' http: // yourdomain.com/ about'. – Rohrbs

2

Я рекомендовал бы удаляясь от Static, и есть About контроллер. Внутри этого контроллера один метод на странице.

public ActionResult About() 
{ 
    return View ("About"); 
} 

//Jobs() and Contacts() follow the same pattern 

3 маршруты, чтобы соответствовать:

routes.MapRoute(
    "Jobs", 
    "about/jobs", 
    new { controller = "About", action = "Jobs" } 
); 

routes.MapRoute(
    "Contact", 
    "about/contact", 
    new { controller = "About", action = "Contact" } 
); 

routes.MapRoute(
    "About", 
    "about/", 
    new { controller = "About", action = "About" } 
); 
+0

вам не нужны эти 3 маршрута, маршрут по умолчанию будет работать отлично. – Stefanvds

+0

Я согласен с сообщением и приведенным выше комментарием. – Jason

1

вы не можете вернуть взгляды от другого контроллера и есть первый контроллер в URL.

единственный способ использования вашего контроллера.

поэтому поместите свою логику в свой контроллер.

У меня то же самое для себя в контроллере Admin. это просто страница с некоторыми статическими ссылками и некоторыми дополнительными страницами.

в index.aspx я есть

<ul> 
    <li> 
     <%= Html.ActionLink("Evaluaties", "Evaluaties", "Admin")%></li> 
    <li> 
     <%= Html.ActionLink("ONAS aanbieders", "Index", "ONASAanbieder")%></li> 
    <li> 
     <%= Html.ActionLink("ONAS aanbod", "Index", "ONASAanbod")%></li> 
    <li> 
     <%= Html.ActionLink("Helpbox", "Index", "HelpBox")%></li> 
</ul> 

в контроллере у меня есть

public ActionResult Index() { 
     return View(); 
    } 

    public ActionResult Evaluaties() { 
     return View(); 
    } 

это работает, как вы описали, нет необходимости изменять маршруты. , очевидно, у меня есть Evaluaties.aspx в моей папке Admin в папке Views.

дает мне этот URL: http://localhost:50152/Admin/Evaluaties