在过去的几天里,我问了几个问题,可能没有得到答案,因为它可能是广泛的。经过一些研究,我可能已经缩小了一点。
我想知道是否有一种方法可以使用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或其他东西..任何想法?
答案 0 :(得分:1)
您无需将所选值传递给查询字符串。
只要单选按钮的名称等于控制器操作中的变量,MVC就会将表单值绑定到操作中的变量。
在您的示例中,如果您的表单包含名为ActionAll
的单选按钮列表,以及值为true
和false
的两个单选按钮,那么如果您的控制器操作具有名为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。