我想重定向到其他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 声明为可选参数。参数名称:参数
答案 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 });
这是一个无效的参数命令,应该是一个动作第一个
和强>
确保您的路由表正确