Html.BeginForm路由值包括表单单选按钮结果

时间:2011-10-31 11:52:08

标签: asp.net-mvc-routing html.beginform routevalues

在过去的几天里,我问了几个问题,可能没有得到答案,因为它可能是广泛的。经过一些研究,我可能已经缩小了一点。

我想知道是否有一种方法可以使用Begin表单的Html.BeginForm(action,controller,routeValues)重载来传递RadioButton结果(即,用户点击了两个选项中的一个)。我需要将该值传递给查询字符串,以便我的操作可以处理它。我的动作有两个参数,到目前为止我只能弄清楚如何将其中一个值放入动作中。这是一些示例代码......

<%Html.BeginForm("TemplateInfo","PatientACO",new { PopulationID = ViewData["POPULATIONID"], ActiveAll = "1"});        
%><input type="submit" value="Refresh" id="test" /><%
%></div>
<% Html.EndForm(); %>

注意,我正在设置我的ActiveAll属性,自动神奇。我需要动态设置它。 IE,它需要由用户设置。因为该特定动作需要两个参数。需要弄清楚如何将动态值纳入该行动?我希望routeValue词典或者通常的routValues可以帮助我找到一种方法来完成这项工作。

如果你有任何想法如何做到这一点我会非常感激。

更新

我还想提一下,我不想更改控制器以接受FormCollections,因为此操作由其他方法和视图调用。有什么想法吗?

更新2

好的,稍微研究一下,我想我想弄清楚的是,如何在视图中获取单选按钮的Form值,以便我可以将它添加到RouteValueDictionary或其他东西..任何想法?

1 个答案:

答案 0 :(得分:1)

您无需将所选值传递给查询字符串。

只要单选按钮的名称等于控制器操作中的变量,MVC就会将表单值绑定到操作中的变量。

在您的示例中,如果您的表单包含名为ActionAll的单选按钮列表,以及值为truefalse的两个单选按钮,那么如果您的控制器操作具有名为ActionAll的布尔变量,单选按钮列表选择的结果将绑定到控制器操作的ActionAll变量。

<强>更新

根据您提供的信息,如果您的操作方法如下所示:

[HttpPost]
public ActionResult TemplateInfo(bool ActionAll, ... )

然后,您可以使用以下内容从视图中的按钮列表传递ActionAll变量:

<input type="radio" value="true" id="ActionAll" name="ActionAll" /> All
<input type="radio" value="false" selected="selected" id="ActionAll" name="ActionAll" /> Not All

如果在操作中设置了断点,您将看到已根据列表中选定的单选按钮设置了ActionAll。如果ActionAll不是布尔值,请相应地调整列表,以传递正确的值类型以绑定到ActionAll。