如何从视图传递值到控制器动作参数?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 !我不知道可能的原因。
有谁能帮帮我吗?该方法期望路由参数的形式略有不同:
Html.RenderAction("Checks", new {getRoleNames = Model.GetRoleNames});
更新。至于为什么要以这种形式提供参数,可以参考MSDN中的描述:
routeValues
包含路由参数的对象。你可以使用routeValues来提供绑定到动作方法参数。routeValues参数与初始路由值并覆盖它们。
这里唯一要添加的是如何将该对象精确地绑定到输入参数。默认模型绑定器解析输入对象,并尝试查找对象字段和Action输入参数名称之间的对应关系。因此,在上面的例子中,Action
有一个名为getRoleNames
的参数,这就是模型绑定器要查找的名称。显然对象Model.GetRoleNames
不包含这样的字段/属性,而对象new {getRoleNames = Model.GetRoleNames}
有。