如何为params string []参数设置参数值

时间:2014-10-28 06:09:26

标签: arrays asp.net-mvc url model-view-controller

我需要提供以下地址

http://example.com/Content/Details?cid=34&query=%D8%AA%D8%AD&positions%5B0%5D=true&positions%5B0%5D=false&positions%5B1%5D=false&positions%5B2%5D=false

解码后的这个网址是:

  http://example.com/Content/Details?cid=32&query=تحلیل&positions[0]=true&positions[0]=false&positions[1]=false&positions[2]=false

我的操作方法包含以下参数

public ActionResult Details(
string cid, string query,  int? page, int id = 0, params string[]      positions)
{

 if(positions != null)
    {
      ViewBag.Title = positions[0];
      ViewBag.Description = positions[1];
      ViewBag.KeyWord = positions[2];

     }
}

但是当我设置position参数所需的参数时,我得到一个错误:

实际上我不能使用位置[0],位置[1]和位置[2] !!!

我的cshtml页面:

@{ title  
    @Html.CheckBox("positions[0]", ViewBag.Title as string)  

    description
    @Html.CheckBox("positions[1]", ViewBag.Description as string)  

   keyword 
    @Html.CheckBox("positions[2]", ViewBag.KeyWord as string)  

}

@Html.PagedListPager(Model, page => Url.Action("Details", new {cid = ViewBag.currentFilter, query= ViewBag.currentSearchString , positions[0]=ViewBag.title , positions[1]=ViewBag.Description ,position[2]=ViewBag.KeyWord,page }))

如何在cshtml页面中设置position参数的值?

我如何设置位置[0],位置[2]和位置[3] ......我只想知道这个

我的其余代码是正确的

请帮帮我

1 个答案:

答案 0 :(得分:0)

您应该在控制器中阅读它们并在ViewBag或ViewData中设置它们:

ViewData["positons_0"] = Request.QueryString["positions[0]"];
ViewData["positons_1"] = Request.QueryString["positions[1]"];
// etc ...

然后您也可以在视图中使用它们。

但是如果可能的话,我建议您从查询字符串中删除方括号。这些是IP v6地址文字的保留字符(请参阅here),这就是为什么你不能在MVC中使用它们。你的网址应该是:

http://example.com/Content/Details?cid=32&query=تحلیل&positions=true&positions=false&positions=false&positions=false

通过这种方式,您可以在控制器中使用它:

public ActionResult Details(string cid, string query,  int? page, int id = 0, string[] positions)
{ 
    // ....
}

...并查看:

@foreach(string position in Model.positions) // example
{ 
    // ....
}