2012-12-14 31 views
1

我试图将一组单选按钮绑定到我的模型中的一个值。通常这很容易做到,但我试图稍微改变它,所以它可以像这样工作。 IsEventsRegistration是一个Int和可能的选择是0 - 5我想在第一个被显示给用户3个单选按钮:RadioButtonFor MVC中的模型

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

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

如果IsEventsRegistration是> 1 - 选择所述第三无线电按钮

,然后将该被隐藏与jquery的4个单选按钮另一组将显示出来。我可以用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#的答案是一样好

回答

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'); 
}); 
+0

这会工作,感谢 –

+0

哦,有一两件事 - 模型是否填写值jQuery的$(文件)。就绪()之前? –

+0

是的,我认为应根据您的控制器提供给您的视图的型号检查适当的收音机。本质上,无论什么'x.IsEventsRegistration'等于将是最初的“检查”收音机。 – neouser99

0

我想不出如何做你想要什么......不知道,甚至有可能...但我可以建议你一些解决方法。

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

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

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

这样,一旦回传到服务器......你将有2个值,并在你需要保存在一个领域中的数据库的情况下,你可以在控制器动作中添加逻辑检查什么保存。

然后,如果您需要编辑这一点,你需要一些JS设置你的单选按钮的当前状态,然后将JS逻辑将是一样的,在创建视图。

希望这会有所帮助!

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; 
    ...  
}