如何从视图传递值到控制器动作参数?MVC3

本文关键字:控制器 参数 MVC3 视图 | 更新日期: 2023-09-27 18:17:25

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

View Code:

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 />
}

}

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

有谁能帮帮我吗?

如何从视图传递值到控制器动作参数?MVC3

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

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

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

routeValues

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

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