RadioButtonFor绑定到MVC中的Model

时间:2012-12-14 16:28:05

标签: asp.net-mvc

我正在尝试将一组单选按钮绑定到我的模型中的值。通常情况下这很容易做到,但我试图改变一点,所以它的工作方式就像这样。 IsEventsRegistration是一个Int,可能的选择是0 - 5.我希望首先向用户显示3个单选按钮:

如果IsEventsRegistration为0 - 请选择第一个单选按钮

如果IsEventsRegistration为1 - 请选择第二个单选按钮

如果IsEventsRegistration是> 1 - 选择第三个单选按钮

然后显示另一组4个用jquery隐藏的单选按钮。我可以用jQuery处理隐藏和显示无线电组的问题。我的问题是 - 有没有办法将这些单选按钮绑定到IsEventsRegistration的值如果值为> 1那么这样做,那么我的2 Or 3 Or 4 Or 5收音机将被检查,也是正确的收音机会被检查吗?

@Html.RadioButtonFor(Function(x) x.IsEventsRegistration , 0) <a>...</a><br />
@Html.RadioButtonFor(Function(x) x.IsEventsRegistration , 1) <a>...</a><br />
@Html.RadioButtonFor(Function(x) x.IsEventsRegistration, 2 Or 3 Or 4 Or 5) <a>...</a><br />

<div class="hideRadios">
   @Html.RadioButtonFor(Function(x) x.IsEventsRegistration , 2) <a>...</a><br />
   @Html.RadioButtonFor(Function(x) x.IsEventsRegistration , 3) <a>...</a><br />
   @Html.RadioButtonFor(Function(x) x.IsEventsRegistration , 4) <a>...</a><br />
   @Html.RadioButtonFor(Function(x) x.IsEventsRegistration , 5) <a>...</a><br />
</div>

这是VB.Net,但c#答案同样好

3 个答案:

答案 0 :(得分:2)

由于您可以使用javascript,这是我可能会推荐的。让2+值的无线电不属于绑定到IsEventsRegistration.的无线电组的一部分当“点击”时显示额外值,使用户能够选择其中一个,甚至默认无线电选择到列表中的第一个。如果事先经过检查,请不要忘记“取消选中”0或1无线电。如果“点击”0或1,则折叠更多选项组。

如果“show more”收音机不是Model组的一部分,您不必在控制器中执行任何特殊操作来解析其中的值。

对于初始绘图,只需进行$(function () {...})检查以查看是否选择了任何“显示更多”无线电,并勾选外部单选按钮以触发.show功能。

粗略

@Html.RadioButtonFor(Function(x) x.IsEventsRegistration , 0) <a>...</a><br />
@Html.RadioButtonFor(Function(x) x.IsEventsRegistration , 1) <a>...</a><br />
<input id="more" type="radio" name="show-others">

<div class="hideRadios">
  @Html.RadioButtonFor(Function(x) x.IsEventsRegistration , 2) <a>...</a><br />
  @Html.RadioButtonFor(Function(x) x.IsEventsRegistration , 3) <a>...</a><br />
  @Html.RadioButtonFor(Function(x) x.IsEventsRegistration , 4) <a>...</a><br />
  @Html.RadioButtonFor(Function(x) x.IsEventsRegistration , 5) <a>...</a><br />
</div>

$(document).on('click', '#more', function () {
  $(this).siblings('input:radio').prop('checked', false);
  $('.hideRadios').show();
});

$(function () {
  if ($('.hideRadios input:checked').val() > 1)
    $('#more').trigger('click');
});

答案 1 :(得分:0)

我想不出怎么做你想要的......不知道它是否可能......但我可以建议你一些解决方法。

只需在模型中创建2个属性(ViewModel):一个名为IsEventsRegistration,另一个名为IsEventsRegistrationAdvaced

然后,将第二个属性用于隐藏的无线电。

使用jQuery,取消隐藏第二组radiobuttons并选择第一组。

这样,一旦回发到服务器......你将有2个值,如果你需要保存到数据库中的单个字段,你可以在控制器动作中添加逻辑来检查要保存的内容。 / p>

如果你需要编辑它,你需要一些JS来设置你的radiobuttons的当前状态,然后JS逻辑将与创建视图中的相同。

希望这有帮助!

答案 2 :(得分:0)

这是不可能的,单选按钮可供选择。

我会将单选按钮划分为两个绑定到不同模型属性的组,并处理控制器中的数据。

型号:

class MyModel {
  ...
  public int IsEventRegistrationMain { get; set; }
  public int IsEventRegistrationDetail { get; set; }
  ...
}

查看:

@Html.RadioButtonFor(x => x.IsEventRegistrationMain , 0) <a>...</a><br />
@Html.RadioButtonFor(x => x.IsEventRegistrationMain , 1) <a>...</a><br />
@Html.RadioButtonFor(x => x.IsEventRegistrationMain , 2) <a>...</a><br />

<div class="hideRadios">
  @Html.RadioButtonFor(Function(x) x.IsEventRegistrationDetail , 2) <a>...</a><br />
  ...

控制器:

public ActionResult Process(MyModel model) {
  ...
  var IsEventRegistration = model.IsEventRegistrationMain == 2 ? model.IsEventRegistrationDetail : model.IsEventRegistrationMain;
  ...    
}