2015-11-19 1 views
0

Я новичок в MVC, но я неплохо знаком с C#. Поэтому я играл с MVC в Visual Studio, где я столкнулся с этой проблемой, и я не могу найти причину этой ошибки.Для цикла в MVC не работает для разных MapRoute

Я пытаюсь напечатать переменную n раз. Она работает очень хорошо, когда я использовать данный URL-адрес

http://localhost:18665/HelloWorld/Welcome?namelala=Rob&numtimes=3 

Выход, как и ожидалось -

This is Rob 
This is Rob 
This is Rob 

Однако, когда я пытаюсь то же самое с этим URL

http://localhost:18665/HelloWorld/Welcome/3/Rob 

Выходом является

This is Rob 

My RouteCo nfig код:

namespace WebApplication1 
{ 
    public class RouteConfig 
    { 
     public static void RegisterRoutes(RouteCollection routes) 
     { 
      routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

      routes.MapRoute(
       name: "Default", 
       url: "{controller}/{action}/{id}", 
       defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 


      ); 

      routes.MapRoute(
       name: "Name_Route", 
       url: "{controller}/{action}/{numtimes}/{namelala}" 

       ); 
     } 
    } 
} 

HomeController Код

public ActionResult Welcome(string namelala, int numtimes=1) 
     { 
      ViewBag.Message = "This is " + namelala; 
      ViewBag.numtimes = numtimes; 

      return View(); 
     } 

Welcome.cshtml Код

<h2>Welcome here</h2> 
<ul> 
    @{ 
     for (int i = 0; i < ViewBag.numtimes; i++) 
     { 
      <li>@ViewBag.Message</li> 
     } 

    } 
</ul> 

Что я делаю неправильно?

+4

Ваших маршруты находятся в неправильном порядке. Наиболее конкретный маршрут должен быть до значения по умолчанию. –

+0

Значит, это означает, что только один будет работать одновременно? Есть ли способ убедиться в том, как работает цикл? EDIT: ------------- Я переместил свой пользовательский маршрут сверху. Оба сейчас работают нормально. Спасибо :) –

+1

Маршрутизация оценивает каждый маршрут, и как только один из них совпадает, данный обработчик будет вызван (например, Controller & Action). Вы можете отлаживать, какой маршрут соответствовал, используя Glimpse (http://getglimpse.com). – Marc

ответ

0

Изменения маршрута конфигурации в:

routes.MapRoute(
    name: "Name_Route", 
    url: "{controller}/{action}/{namelala}/{numtimes}" 
); 

Чтобы соответствовать вашей сигнатуре методы:

public ActionResult Welcome(string namelala, int numtimes=1) 

а также, в соответствии с комментариями Стивена, двигаться по маршруту о маршруте по умолчанию

Смежные вопросы