2014-01-29 5 views
7

У меня есть имя контроллера: округ и Действие имя: Incharges Но я хочу, чтобы URL, чтобы быть похожим на это (имя действия с некоторым paremeter)MVC контроллер Действие Параметр нуль

www.example.com/district/incharges/ ааа

www.example.com/district/incharges/bbb

www.example.com/district/incharges/ccc

Но при отладке teamName всегда возвращают в NULL в параметре действия.

Routing

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

      routes.MapRoute(
      "DistrictDetails", 
      "District/Incharges/{teamName}", 
      new { controller = "District", action = "Incharges" } 
      ); 

Контроллер

Но при отладке teamName всегда возвращают в NULL в параметре действия.

public class DistrictController : Controller 
    {  


     public ActionResult Incharges(string teamName) 
     { 
      InchargePresentationVM INPVM = new InchargePresentationVM(); 
      INPVM.InitializePath(teamName, string.Empty); 
      return View("", INPVM); 
     } 
} 

Просмотр

@{ 
    ViewBag.Title = "Index"; 
} 

<h2>Index About</h2> 

ответ

16

конкретный маршрут вы должны объявить первый

routes.MapRoute(
      "DistrictDetails", 
      "District/Incharges/{teamName}", 
      new { controller = "District", action = "Incharges", id = UrlParameter.Optional } 

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

Благодарим за обновление. Его работа прекрасна. – Velu

+0

Всегда приветствуются. –

+0

Помните, что имя параметра очень важно. В вышеприведенном случае имя параметра в действии должно быть таким же, как правило маршрутизации, то есть Incharges (string id) или изменить правило на новый {controller = "District", action = "Incharges", teamname = UrlParameter.Optional} – learnerplates

1

ASP.NET MVC DefaultModelBinder будет пытаться сделать неявное преобразование типов значений от вашего значения поставщик, например. формы, параметрам метода действия. Если он пытается преобразовать тип из поставщика значений в параметр и не может это сделать, он назначит значение null параметру.

Что касается маршрутизации, ASP.NET MVC имеет концепцию преобразования по конфигурации. Если вы следуете за преобразованием, вместо настройки. Вы можете сохранить свой маршрут по умолчанию и всегда иметь нужный маршрут, назвав ваши контроллеры, методы действий и имена параметров.

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

namespace ConversionOverConfiguration 
    { 

     public class DistrictController: Controller 
     { 
     public ActionResult Incharges(int aaa) 
     { 
      //You implementation here 

      return View(); 
     } 

     } 

    } 
The route will look as below if you have this conversion implementation 
    //Controller/ActionMethod/ActionMethodParameter 
    //District/Incharges/aaa 

И это даст вам домен URI: www.example.com/district/incharges/aaa. Если тип параметра метода действия является строкой, то URI домена: www.example.com/district/incharges/? Aaa = name - строка. Затем вы можете сохранить маршрутизацию по умолчанию ASP.NET MVC

routes.MapRoute 
    (
     name: "Default", 
     url: "{controller}/{action}/{id}", 
     defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional  
    }); 
Смежные вопросы