1

我正在尝试将一组单选按钮绑定到我的模型中的一个值。通常这很容易做到,但我正在尝试对其进行一些更改,以便它像这样工作。 IsEventsRegistration是一个 Int,可能的选择是 0 - 5。我希望首先向用户显示 3 个单选按钮:

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

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

If IsEventsRegistrationis > 1 - 选择第三个单选按钮

然后将显示另一组用 jquery 隐藏的 4 个单选按钮。我可以很好地使用 jQuery 处理广播组的隐藏和显示。我的问题是 - 有没有办法将这些单选按钮绑定到IsEventsRegistrationMaking it 的值,所以如果值是 >1 ,那么我的收音机2 Or 3 Or 4 Or 5将被检查并且正确的 Radio 也会被检查?

@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 ,但 ac# 的答案同样好

4

3 回答 3

2

由于您能够使用 javascript,因此我可能会推荐以下内容。让 2+ 值的单选不属于绑定到的单选组IsEventsRegistration.当“单击”时显示额外的值,使用户能够选择其中一个,甚至默认单选为第一个列表。如果事先检查过,请不要忘记“取消选中” 0 或 1 收音机。如果“单击”了 0 或 1,则折叠该更多选项组。

由于“显示更多”单选不是模型组的一部分,因此您不必在控制器中执行任何特殊操作来解析其中的值。

对于初始绘图,只需$(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');
});
于 2012-12-14T16:57:29.907 回答
0

我想不出如何做你想做的事......甚至不知道它是否可能......但我可以建议你一些解决方法。

只需在您的模型 (ViewModel) 中创建 2 个属性:一个调用IsEventsRegistration,第二个调用IsEventsRegistrationAdvaced.

然后,使用隐藏收音机的第二个属性。

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

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

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

希望这可以帮助!

于 2012-12-14T16:51:20.610 回答
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;
  ...    
}
于 2012-12-14T16:55:25.347 回答