1

如果这几天问一些问题,我很抱歉。但感谢所有帮助。实际上,我需要使用 MVC3 Razor 将数据从视图传递到控制器。

这是查看代码:

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 在视图中具有值。但是没有值作为参数传递给控制器​​动作!我不知道可能的原因。

任何人都可以帮助我吗?

4

1 回答 1

2

此方法期望路由参数的形式略有不同:

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

更新。至于为什么要以这种形式提供参数,可以参考MSDN的描述:

路由值

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

这里唯一要添加的是这个对象是如何绑定到输入参数的。默认模型绑定器解析输入对象并尝试在对象的字段和动作的输入参数名称之间找到对应关系。所以在上面的例子中,Action只有一个名为 的参数getRoleNames,这就是模型绑定器正在寻找的名称。显然对象Model.GetRoleNames不包含这样的字段/属性,而包含new {getRoleNames = Model.GetRoleNames}

于 2013-06-08T09:53:43.123 回答