通过参数mvc重定向到Action

时间:2013-11-12 13:04:29

标签: c# asp.net-mvc redirect asp.net-mvc-5

我想重定向到其他Controller中的操作,但它不起作用 这是我在ProductManagerController中的代码:

[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(没有错误)但是使用上面的代码我得到了这个:

  

参数字典包含空条目   方法的非可空类型'System.Int32'的参数'ID'   'System.Web.Mvc.ViewResult Index(Int32)'中   '... Controllers.ProductImageManagerController'。   可选参数必须是引用类型,可空类型或be   声明为可选参数。参数名称:参数

4 个答案:

答案 0 :(得分:15)

对于同一控制器中的重定向,您无需指定控制器。不确定你是否需要让参数为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 });
}

修改

调用其他控制器,您可能需要使用 RouteValueDictionary

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

如果为其配置了 RouteConfig ,则您提供的示例应该有效,因此您应该检查它以便正确设置它。查看this stackoverflow question和答案以获取更多信息。

编辑2

来自@Mohammadreza的评论,错误发生在 RouteConfig 中。 要让应用程序处理带有id的URL,您需要确保为其配置了Route。您可以在位于 App_Start 文件夹中的 RouteConfig.cs 中执行此操作。

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 }
    );
}

答案 1 :(得分:-1)

这应该有效!

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

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

请注意,如果要返回与操作实现的视图相同的视图,则不必传递视图名称。

您的视图应该继承模型:

@model <Your class name>

然后,您可以在视图中访问您的模型:

@Model.<property_name>

答案 2 :(得分:-2)

试试这个,

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

在这里我提到你也传递了多个值或模型。 这就是为什么我在这里提到的。

答案 3 :(得分:-3)

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

这是一个无效的参数命令,应该是一个动作第一个
确保您的路由表正确