C# 从单个单选按钮的选择中显示单选按钮组/选择的最佳方式?

C# 从单个单选按钮的选择中显示单选按钮组/选择的最佳方式?,c#,jquery,asp.net-mvc,visual-studio-2010,asp.net-mvc-2,C#,Jquery,Asp.net Mvc,Visual Studio 2010,Asp.net Mvc 2,我有一个表格,对于一些问题,它会询问是否包含某些内容,以及是否提供了一个原因 因此,我需要一个单选按钮,该按钮将其值记录到数据库中,就像我使用RadioButton设置的正常值一样。如果选择了Nofalse,则将显示其他单选按钮的组/列表 Ofc这只是理想的解决方案如果此方法不可行,那么另一个解决方案可能是控制器中的if语句,这样,如果主单选按钮的值为Yestrue,则在将表单记录到数据库时,它会将x、y和z单选按钮的值设置为Nofalse 关于如何获得相同的最终结果,我有两个想法,但对于第一个

我有一个表格,对于一些问题,它会询问是否包含某些内容,以及是否提供了一个原因

因此,我需要一个单选按钮,该按钮将其值记录到数据库中,就像我使用RadioButton设置的正常值一样。如果选择了Nofalse,则将显示其他单选按钮的组/列表

Ofc这只是理想的解决方案如果此方法不可行,那么另一个解决方案可能是控制器中的if语句,这样,如果主单选按钮的值为Yestrue,则在将表单记录到数据库时,它会将x、y和z单选按钮的值设置为Nofalse

关于如何获得相同的最终结果,我有两个想法,但对于第一个想法,我认为执行其功能的最简单方法是使用jquery,我对jquery相当陌生,因此很难想出如何实现它

对于第二个想法,1不理想,2我不确定如何引用这些单选按钮/对if语句进行编码来完成上述任务


任何其他想法都是受欢迎的,但希望在如何实施这些想法的帮助下。

我会选择您的第一个解决方案。在页面上呈现两组单选按钮,但使用css隐藏第二组。然后在第一个组的单选按钮上设置一些onclick事件,以根据单击的组显示/隐藏第二个组

我认为手工编写单选按钮的html比较容易,因为您正在编写onclick处理程序,但是您也可以使用RadioButtonOn来管理它

因此,您的是/否将如下所示:

<input type="radio" name="yesNo" id="yes" onlclick="$('#other-options').hide();' value='true' <%: Model.YesNo ? "checked='checked'" : "" %>/><label for='yes'>Yes</label>
<input type="radio" name="yesNo" id="no" onlclick="$('#other-options').show();' value='false'<%: !Model.YesNo ? "checked='checked'" : "" %>/><label for='no'>No</label>
<div id='otherOptions' <%: Model.YesNo ? "style='display: none;'" : "" %>>
    <input type="radio" name="XYesNo" id="xyes" value='true'/><label for='xyes'>X Yes</label>
    <input type="radio" name="XYesNo" id="xno" value='false'/><label for='xno'>X No</label>
    <input type="radio" name="YYesNo" id="yyes" value='true'/><label for='yyes'>Y Yes</label>
    <input type="radio" name="YYesNo" id="yno" value='false'/><label for='yno'>Y No</label>
    <input type="radio" name="ZYesNo" id="zyes" value='true'/><label for='zyes'>Z Yes</label>
    <input type="radio" name="ZYesNo" id="zno" value='false'/><label for='zno'>Z No</label>
</div>
$(document).ready(function() {
    // If user selects any radiobutton:
    if ( $('#rbColorOther:checked').length > 0) {
        $("#divOtherColorText").show();
    } else {
        $("#divOtherColorText").hide();
    }
});

好吧,这听起来有点过分了,但我会选择两种解决方案。从表示的角度来看,您需要javascript脚本端代码来正确地进行验证,并且您还需要服务器端代码来正确地进行验证

如果只实现客户端验证,那么如果浏览器不支持javascript,或者只是禁用了javascript,系统将如何运行?您不能认为javascript支持是理所当然的

OTOH,如果您添加了您正在谈论的客户端功能,您将提供最佳的用户体验

关于您对如何进行服务器端验证的疑问:ASP.NET MVC很容易加载,只需设置post期间读取的相同ViewData entry/ViewModel属性即可

编辑,让我们讨论一个完整的解决方案

再说一遍,我不确定我是否理解你在这里需要什么。你说的是单选按钮,但你似乎也认为你可以单独控制它们——绑定到多个字段的多个收音机。通常情况并非如此——一组单选按钮通常绑定到同一个字段,每个单选按钮表示不同的值,就像一个下拉列表一样。当然,这并不意味着数据库必须以相同的方式运行

请参见此示例:

<% using(Html.BeginForm("HandleForm", "Home")) { %>
    Select your favorite color:<br />
    <%= Html.RadioButton("favColor", "Blue", true, new { id = "rbColorBlue", class = "favColor" }) %> Blue <br />
    <%= Html.RadioButton("favColor", "Purple", false, new { id = "rbColorPurple", class = "favColor" })%> Purple <br />
    <%= Html.RadioButton("favColor", "Red", false, new { id = "rbColorRed", class = "favColor" })%> Red <br />
    <%= Html.RadioButton("favColor", "Orange", false, new { id = "rbColorOrange", class = "favColor" })%> Orange <br />
    <%= Html.RadioButton("favColor", "Yellow", false, new { id = "rbColorYellow", class = "favColor" })%> Yellow <br />
    <%= Html.RadioButton("favColor", "Brown", false, new { id = "rbColorBrown", class = "favColor" })%> Brown <br />
    <%= Html.RadioButton("favColor", "Green", false, new { id = "rbColorGreen", class = "favColor" })%> Green
    <%= Html.RadioButton("favColor", "Other", false, new { id = "rbColorOther", class = "favColor" })%> Other
    <div id="divOtherColorText" style="display: block">
         Describe the color you want here:<br />
         <%=Html.TextArea("otherColorText", new { id = "taOtherColor" }) %><br />
    </div>
<% } %>
当然,您也可以使用ViewModel,但我在这里不讨论该选项

回到客户端。假设您不想显示taOtherColor,除非用户选择rbColorOther单选按钮。jQuery代码如下所示:

<input type="radio" name="yesNo" id="yes" onlclick="$('#other-options').hide();' value='true' <%: Model.YesNo ? "checked='checked'" : "" %>/><label for='yes'>Yes</label>
<input type="radio" name="yesNo" id="no" onlclick="$('#other-options').show();' value='false'<%: !Model.YesNo ? "checked='checked'" : "" %>/><label for='no'>No</label>
<div id='otherOptions' <%: Model.YesNo ? "style='display: none;'" : "" %>>
    <input type="radio" name="XYesNo" id="xyes" value='true'/><label for='xyes'>X Yes</label>
    <input type="radio" name="XYesNo" id="xno" value='false'/><label for='xno'>X No</label>
    <input type="radio" name="YYesNo" id="yyes" value='true'/><label for='yyes'>Y Yes</label>
    <input type="radio" name="YYesNo" id="yno" value='false'/><label for='yno'>Y No</label>
    <input type="radio" name="ZYesNo" id="zyes" value='true'/><label for='zyes'>Z Yes</label>
    <input type="radio" name="ZYesNo" id="zno" value='false'/><label for='zno'>Z No</label>
</div>
$(document).ready(function() {
    // If user selects any radiobutton:
    if ( $('#rbColorOther:checked').length > 0) {
        $("#divOtherColorText").show();
    } else {
        $("#divOtherColorText").hide();
    }
});

我想就是这样。如果我错过了什么,请告诉我…:-

我找到了最简单的方法,让控制器整理出需要验证的内容 如果wd.AppTher==true
{wd.AppTherRea=0;}这是一个下拉列表的示例,对于另一个单选按钮,它将代替0或任何您希望下拉列表为false的值,或者如果您希望/有多个db字段类型为int的选项,那么您只需将N/a或w/e值设置为=太多,对于多个RB或DDL,则只需在两者之间添加更多{和},wd是指定用于表示表的值,否则可以使用viewmodel值。

我真的不明白,因为您几乎没有使用任何标点符号。如果您能修复它会更好,明白我的意思。@rsenna我所能做的就是将它隔开一点,所以我希望这是正确的better@rsenna:有什么想法或解决方案吗tions?超过100个视图,但只有2张投票,所有这些都是我的,我猜其他人在无意中看到这个页面时都在寻找其他东西。那么我该如何对单选按钮进行分组呢?正如我所说,我对jquery不是很擅长,所以尽管我发现这是针对表行的,看起来它并没有记录原始的单选按钮值,所以仍然如此不清楚如何解决这个问题。只需将您的第二个组包装在一个div中,然后显示/隐藏该div。然后我如何设置该div,然后让jquery取消隐藏它,或者让jquery onload隐藏它,如果它是onload命令而不是另一个命令?@Brian关于如何实现您的解决方案有什么想法吗,那么Brian,因为我已经获得了rsenna的支持lution对正常编码的部分进行了一半的处理,然后jquery将其隐藏,但它不想让我再次显示它
n所以要么我需要一种新的方法来隐藏它,用一个补充的show代码,要么修改版本的rsennas jquery代码,我尝试了多种组合和不同的方法来让jquery工作,比如用大小替换长度,并尝试使onclick事件显示部分,但没有效果。@Brian Well将onclick=$“other-options.”隐藏;在m.amwrAudit.AppTher中,true,new{…}%>和其他按钮的opp现在正确地显示和隐藏了它,所以对于大多数人来说,这将是一个简单的解决方案,但是现在正在努力让控制器方面使用它。我仍然不确定如何实现上述功能,我知道m.BlahTable.BlahColumn,false,new{@onclick=showReasons}%>不,然后我会在它下面的标签函数showReasons{这就是我如何调用它的,但是如何将单选按钮隐藏在第一位,然后显示它们是我不确定的,因为我是jquery新手。我已经正确地隐藏了所有内容,但它似乎不喜欢再次显示,我甚至设置了一个[@onclick=showReason,]在hopes[function showReason{//If user选择了任何单选按钮:If$'appTherNo:checked'.length>0{$'reasontest.show;}中的id旁边,否则{$'reasontest.hide;}]可以,但这也不想触发它,除非它们必须是唯一的RadioButton,因为我的必须是RadioButton。嗯,我测试了一个普通的RadioButton,它也隐藏了,但不会再显示。