2013-11-12 4 views
9

Я хочу, чтобы перенаправить к действию в другом контроллере, но он не работает вот мой код в ProductManagerController:Перенаправление действий по параметру MVC

[HttpPost] 
public ActionResult RedirectToImages(int id) 
{ 
    return RedirectToAction("Index","ProductImageManeger", new { id=id }); 
} 

и это в моем ProductImageManagerController:

[HttpGet] 
public ViewResult Index(int id) 
{ 
    return View("Index",_db.ProductImages.Where(rs=>rs.ProductId == id).ToList()); 
} 

Он перенаправляет на ProductImageManager/Index без параметров очень хорошо (без ошибок), но с приведенным выше кодом я получаю это:

Параметры словарь содержит нулевой элемент для параметра «ID» не-обнуляемого типа «System.Int32» для метода «System.Web.Mvc.ViewResult Индекс (Int32)» в «ShoppingCart.Areas. Admin.Controllers.ProductImageManagerController. Необязательный параметр должен быть ссылочным типом, нулевым типом, или быть , объявленным как необязательный параметр. Имя параметра: Параметры

+0

RedirectToImages не может перенаправить ProductImageManager/Index из-за недопустимого параметр порядка – LINQ2Vodka

+0

@jim У меня есть только один параметр, идентификатор, так, что параметр порядка в виду здесь? – Mohammadreza

+0

Нужно «Индекс», «ProductImageManager» вместо «ProductImageManager», «Index» ' – LINQ2Vodka

ответ

-3
return RedirectToAction("ProductImageManager","Index", new { id=id }); 

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

+0

Это тот же самый код, что и у OP. –

+0

И это не делает ничего хорошего. Исправьте свой ответ, и я избавлюсь от своего downvote. –

+0

@MichaelPerrenoud вы отказались от своей кармы :) – LINQ2Vodka

-2

Попробуйте это,

return RedirectToAction("ActionEventName", "Controller", new { ID = model.ID, SiteID = model.SiteID }); 

Здесь я упоминаю, что вы передаете несколько значений или модель. Вот почему я упоминаю об этом.

+1

Где находился 'SiteID «Из чего? –

12

Для перенаправления в том же контроллере вам не нужно указывать контроллер. Не уверен, что, если вам нужно иметь параметр Nullable сделать переадресацию или если мы имеем его в качестве обнуляемого, потому что нам нужны в другом чувстве, но это из рабочего проекта:

[HttpGet] 
public ActionResult EditRole(int? selectedRoleId) 
{ 
    AddEditRoleViewModel role = _userService.GetAllRoles(selectedRoleId); 
    return View(role); 
} 

[HttpPost] 
public ActionResult EditRoleSave(AddEditRoleViewModel role) 
{ 
    _userService.SaveRole(role); 
    return RedirectToAction("EditRole", new { selectedRoleId = role.Id }); 
} 

EDIT

Вызов другого контроллера, вам может понадобиться использовать RouteValueDictionary:

return RedirectToAction("Index", new RouteValueDictionary( 
    new { controller = "ProductImageManager", action = "Index", id= id }) 
); 

пример вы предоставили должны работать, если ваш RouteConfig настроен для этого, поэтому вы должны проверить его так, чтобы он был настроен правильно. Проверьте this stackoverflow question и ответьте для получения дополнительной информации.

EDIT 2:

По комментарий от @Mohammadreza, ошибка была в RouteConfig. Чтобы приложение обрабатывало URL-адреса с идентификатором, вам необходимо убедиться, что для него настроен маршрут. Вы делаете это в RouteConfig.cs, расположенном в папке App_Start.

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

    //adding the {id} and setting is as optional so that you do not need to use it for every action 
    routes.MapRoute(
     name: "Default", 
     url: "{controller}/{action}/{id}", 
     defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
    ); 
} 
+0

дорогой @Binke их не то же самое. productManger и productImageManger. моя ошибка заключалась в настройке в routeConfig. Я упоминаю это в комментарии к комментарию. любым способом tnx для вашей помощи :) – Mohammadreza

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