如何使用包含连字符的名称传递查询字符串参数?

时间:2014-05-12 16:35:08

标签: c# asp.net-mvc-4 query-string

我需要将查询字符串传递给重定向。我知道你可以这样做:

return RedirectToAction("Index", new { param1 = "hello" });

将转到/Index?param1=hello

但我需要传递名称中带有连字符的参数。我们称之为数据参数。由于C#名称中不允许使用连字符,因此我无法以上述方式执行此操作。我知道在MVC的某些地方,下划线用于处理这个,但是这里也不起作用,下划线按原样传递给查询字符串。

所以我的问题是,如何重定向到/ Index?data-param = hello

2 个答案:

答案 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())一起使用。