如何将值从View传递给Controller Action参数? MVC3

时间:2013-06-08 09:45:28

标签: c# asp.net-mvc-3

如果这些天提出一些问题,我道歉。但感谢各种帮助。实际上,我需要使用MVC3 Razor将数据从View传递到Controller。

以下是查看代码:

Html.RenderAction("Checks", Model.GetRoleNames);

以下是控制器代码:

    public ActionResult Checks(string[] getRoleNames)
    {
        // The parameter is NULL which should NOT be!
        //ViewBag.Name = name;
        //return View(values);
        return View();
    }

以下是部分查看代码:

@model string[]
@{
for (int i = 0; i < Model.Length; i++)
{
<input id="@ViewBag.Name@(i)" name="@ViewBag.Name" type="checkbox" value="@(Model[i])"    />
<label for="@ViewBag.Name@(i)">@Model.[i]</label>
<br />
}

}

问题:当我尝试逐行跟踪时,Model.GetRoleNames在View中有值。但是没有值作为参数传递给Controller Action!我不知道可能的原因。

有人可以帮我吗?

1 个答案:

答案 0 :(得分:2)

此方法需要稍微不同的路径参数:

Html.RenderAction("Checks", new {getRoleNames = Model.GetRoleNames});

更新。至于为什么要以这种形式提供参数,可以参考说明from MSDN

  

routeValues

     

包含路径参数的对象。您   可以使用routeValues来提供绑定到的参数   动作方法参数。 routeValues参数与   原始路线值并覆盖它们。

这里唯一要添加的是这个对象如何绑定到输入参数。默认模型绑定器解析输入对象并尝试查找对象的字段与Action的输入参数名称之间的对应关系。因此,在上面Action的情况下,getRoleNames有一个名为Model.GetRoleNames的参数,这就是模型绑定器正在寻找的名称。显然,对象new {getRoleNames = Model.GetRoleNames}不包含此类字段/属性,而{{1}}则包含此字段/属性。