2009-09-05 2 views
0

У меня есть действие на моем контроллере (имя контроллера - «makemagic»), называемое «dosomething», которое принимает значение nullable int, а затем возвращает представление «dosomething.aspx». По крайней мере, это то, что я пытаюсь сделать. Кажется, что меня направляют в представление Default().Перенаправление ASP.NET MVC Действие по умолчанию?

public ActionResult dosomething(int? id) 
{  
    var model = // business logic here to fetch model from DB 
    return View("dosomething", model); 
} 

Существует файл /Views/makemagic/dosomething.aspx, который имеет Inherits System.Web.Mvc.ViewPage

мне нужно сделать что-то мои маршруты ли? В моем файле global.aspx.cs есть только «стандартные» по умолчанию маршруты;

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

     routes.MapRoute(
      "Default",            // Route name 
      "{controller}/{action}/{id}",       // URL with parameters 
      new { controller = "Home", action = "Index", id = "" } // Parameter defaults 
    ); 

} 

Я вызываю действие через href, как это на другой странице;

<a href="/makemagic/dosomething/25">Click Me!</a> 

Серьезно вождение меня nutso. Любые предложения по устранению неполадок? Я попытался отладить перерыв в определении маршрута и, похоже, разрыв там не происходит, как и следовало ожидать.

ответ

2

Измените его так, чтобы параметр был недействительным, чтобы он соответствовал маршруту по умолчанию или изменил имя на что-то другое, кроме id, и предоставил его в качестве параметра запроса. Примером последнего может быть:

public ActionResult dosomething(int? foo) 
{  
    var model = // business logic here to fetch model from DB 
    return View("dosomething", model); 
} 

<a href="/makemagic/dosomething?foo=25">Click me</a> 

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

routes.MapRoute(
     "Default",          // Route name 
     "{controller}/{action}/foo/{id}",    // URL with parameters 
     new { controller = "makemagic", action = "dosomething", id = "" } // Parameter defaults 
); 

<a href="/makemagic/dosomething/foo/25">Click Me!</a> 
+0

Спасибо за ваш ответ. Думаю, я просто что-то пропустил: Действие вроде этого; ActionResult dosomething (int foo) {} Пробовал это, не удалось; Click Пробовал это, не удалось; Click Продолжает посылать меня в/makemagic/details action!?!?! Кажется странным, если мне нужно настроить новый маршрут, конечно, это общий сценарий? Да? – CmdrTallen

+0

Даже попробовал <% = Html.ActionLink («makemagic», «dosomething», new {foo = 25})%>, и это тоже не удалось. Grrrr. – CmdrTallen

+0

Если я копирую URL-адрес и вставляю его в новое окно, он работает, но, кажется, изнутри страницы он «потерян». Это работает в браузере, когда я вставляю его; http: // localhost: port/makemagic/dosomething/foo/25 Но когда как href, похоже, идет; http: // localhost: port/home/default Идеи? – CmdrTallen

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