如果这些天提出一些问题,我道歉。但感谢各种帮助。实际上,我需要使用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!我不知道可能的原因。
有人可以帮我吗?
答案 0 :(得分:2)
此方法需要稍微不同的路径参数:
Html.RenderAction("Checks", new {getRoleNames = Model.GetRoleNames});
更新。至于为什么要以这种形式提供参数,可以参考说明from MSDN:
routeValues
包含路径参数的对象。您 可以使用routeValues来提供绑定到的参数 动作方法参数。 routeValues参数与 原始路线值并覆盖它们。
这里唯一要添加的是这个对象如何绑定到输入参数。默认模型绑定器解析输入对象并尝试查找对象的字段与Action的输入参数名称之间的对应关系。因此,在上面Action
的情况下,getRoleNames
有一个名为Model.GetRoleNames
的参数,这就是模型绑定器正在寻找的名称。显然,对象new {getRoleNames = Model.GetRoleNames}
不包含此类字段/属性,而{{1}}则包含此字段/属性。