0

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

我想知道是否有一种方法可以使用 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

好的,通过更多的研究,我想我想弄清楚的是,如何在视图中获取单选按钮的表单值,以便我可以将其添加到 RouteValueDictionary 或其他东西......任何想法?

4

1 回答 1

1

您不需要将选定的值传递到查询字符串中。

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

在您的示例中,如果您的表单有一个名为 的单选按钮列表ActionAll和两个值为trueand的单选按钮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。

于 2011-10-31T17:27:35.033 回答