我需要将查询字符串传递给重定向。我知道你可以这样做:
return RedirectToAction("Index", new { param1 = "hello" });
将转到/Index?param1=hello
。
但我需要传递名称中带有连字符的参数。我们称之为数据参数。由于C#名称中不允许使用连字符,因此我无法以上述方式执行此操作。我知道在MVC的某些地方,下划线用于处理这个,但是这里也不起作用,下划线按原样传递给查询字符串。
所以我的问题是,如何重定向到/ Index?data-param = hello
答案 0 :(得分:1)
如果您正在尝试构建网址,您可以稍微绕过MVC路由,并以旧方式传递完整的网址。
string dataParam="hello";
int otherParam=5;
return Redirect( String.Format("/Index?data-param={0}&data-param2={1}", dataParam, otherParam) );
如果您要使用自己的MVC应用程序,那么除非您重定向到某个操作,否则您可能不会想要RedirectToAction
。
答案 1 :(得分:0)
这有效(我使用的是ASP.NET Core 3.1,无法使用早期版本):
var params = new Dictionary<string, string>()
{
{ "data-param1", "hello" }
{ "data-param1", "2" }
};
return RedirectToAction("Index", params);
您可以根据需要使用Dictionary<string, object>()
,尽管您会放弃一些控制权(例如,将false
转换为URL中的"False"
而不是"false"
) 。而且您应该使用nameof()
以获得更好的可维护性:
var params = new Dictionary<string, object>()
{
{ "data-param1", "hello" }
{ "data-param2", 2 }
};
return RedirectToAction(nameof(Index), params);
还要注意,该字典技术也可以与其他方法(例如RedirectToRoute()
)一起使用。