2013-07-20 4 views
2

Im новый для использования MVC, поэтому я думал, что дам ему попробовать.MVC ActionLink issue

У меня есть проблема с моим ActionLink:

foreach (var item in areaList) 
{ 
    using (Html.BeginForm()) 
    { 
     <p> 
     @Html.ActionLink(item.AreaName, "GetSoftware","Area", new { id = 0 },null); 
     </p> 
    } 
} 

GetSoftware мое действие, Area мой контроллер.

моя ошибка:

The parameters dictionary contains a null entry for parameter 'AreaID' of non-nullable type 'System.Int32' for method 'System.Web.Mvc.ActionResult GetSoftware(Int32) 

мой Действие:

public ActionResult GetSoftware(int AreaID) 
{ 
    return View(); 
} 

Я проверил здесь те же вопросы, и им следовать, но по-прежнему Свои замечания и ту же ошибку. Кто-нибудь понял, что не так

+1

Вы пробовали изменяя ' new {id = 0} 'to' new {AreaId = 0} ' –

ответ

1

Имена параметров для действия не совпадают. Просто используйте это:

@Html.ActionLink(item.AreaName, "GetSoftware", "Area", new { AreaID = 0 }, null); 
0
@Html.ActionLink(item.AreaName, "GetSoftware","Area", new {AreaID = 0 },null); 
0
@Html.ActionLink(item.AreaName, "GetSoftware","Area", new {AreaID = 0 },null); 

Я думаю, что это будет работать для вас.

0

Тип анонима, который вы отправляете в качестве четвертого параметра помощника ActionLink, должен иметь членов с тем же именем, что и ваши параметры метода действий.

@Html.ActionLink("LinkText", "Action","Controller", routeValues: new { id = 0 }, htmlAttributes: null); 

метод действий в классе контроллера:

public ActionResult Action(int id) 
{ 
    // Do something. . . 

    return View(); 
} 
+0

, это вообще не поможет, параметр« id »все тот же и все равно не будет найден. – Thousand

0

Вам просто нужно изменить параметр вашего метода действия. Как ваш ActionLink(), как происходит некорректно:

@Html.ActionLink(item.AreaName, "GetSoftware", "Area", 
    routeValues: new { id = 0 }, htmlAttributes: null) 

Вы должны изменить контроллер, как:

public ActionResult GetSoftware(int id) 
{ 
    return View(); 
} 

Это поведение маршрутизации по умолчанию. Если вы настаивали, чтобы использовать AreaID в качестве параметра, вы должны объявить маршрут в RouteConfig.cs и поставить его перед тем маршрут по умолчанию:

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

     // some routes ... 

     routes.MapRoute(
      name: "GetSoftware", 
      url: "Area/GetSoftware/{AreaID}", 
      defaults: new { controller = "Area", action = "GetSoftware", AreaID = UrlParameter.Optional } 
     ); 

     // some other routes ... 

     // default route 

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

Попробуйте

foreach (var item in areaList) 
{ 
    using (Html.BeginForm()) 
    { 
    <p> 
     @Html.ActionLink(item.AreaName, //Title 
        "GetSoftware",  //ActionName 
        "Area",    // Controller name 
        new { AreaID= 0 }, //Route arguments 
         null   //htmlArguments, which are none. You need this value 
             //  otherwise you call the WRONG method ... 
      ); 
    </p> 
    } 
}