【问题标题】:ASP .NET MVC: Dealing with radio buttons to and from View<->ControllerASP .NET MVC:处理与 View<->Controller 之间的单选按钮
【发布时间】:2011-06-24 15:49:46
【问题描述】:

我一直在尝试让简单的“是/否”单选按钮列表正常工作,但遇到了奇怪的问题。请参考我下面的代码sn-ps。

型号:

                 public bool isTimer { get; set; }

查看:

                <div class="timer-selection">
                <%: Html.Label("Timer") %> 
                <%= Html.RadioButton("isTimer", Model.isTimer) %> Yes 
                <%= Html.RadioButton("isTimer", !Model.isTimer) %> No 
                </div>

Javascript sn-p 设置 isTimer 值:

                var timer = $(this).children("input.isTimer").val();
                $('#UpdateButton_isTimer').val(timer);

控制器:

    public virtual ActionResult CustomViewAdd(TimerViewModel model)
    {
            UITimerTable timer = new UITimerTable()
            {
                // My other properties
                isTimer = model.NewIsTimer
            };

        if (ValidateAndSubmitChanges())
            return RedirectToAction(MVC.Screen.CustomView(view.Id, false));

        return View(model);
    }

这成功地在我的数据库中添加了 isTimer 值,但有两件事我无法理解。

  1. 当我选择 YES 时,它会在数据库中插入 False 值,当我选择 NO 时,它会插入 TRUE!我可以像下面一样在 View 中交换 NOT(!) 运算符,但从逻辑上讲它是错误的。

                <%= Html.RadioButton("isTimer", !Model.isTimer) %> Yes 
                <%= Html.RadioButton("isTimer", Model.isTimer) %> No 
    
  2. 虽然我已经编写了 JAVASCript 以在我的表单再次加载(可见)时将值设置回来,但在我将其设置为 True 之后它总是将单选按钮值返回为 TRUE,并且无论何时加载,都会检查 YES 单选按钮。我从来没有检查过任何单选按钮!以下是我从 Chrom 检查元素时得到的 HTML 代码!不知道为什么 YES 单选按钮总是被设置。

                <div class="timer-selection">
                <label for="Timer">Timer</label> 
                <input checked="checked" id="UpdateButton_isTimer" name="UpdateButton.isTimer" type="radio" value="True"> Yes 
                <input id="UpdateButton_isTimer" name="UpdateButton.isTimer" type="radio" value="True"> No 
                </div>
    

任何帮助将不胜感激!

谢谢。

【问题讨论】:

    标签: asp.net-mvc-2 radiobuttonlist


    【解决方案1】:

    看来您应该像这样设置单选按钮

      <%= Html.RadioButton("isTimer", True) %> Yes 
      <%= Html.RadioButton("isTimer", False) %> No 
    

    isTimer 的当前状态无关紧要。您正在尝试设置它;不要切换它。如果您要创建一个按钮来切换它,您可以使用 !Model.isTimer ,这很有意义。

    要使您的单选按钮选中应选中的那个,您需要这样做:

      <%= Html.RadioButton("isTimer", True, Model.isTimer) %> Yes 
      <%= Html.RadioButton("isTimer", False, !Model.isTimer) %> No 
    

    我相信第三个参数是它是否会被检查。那么让我们看看上面的作用。如果 Model.isTimer 为 true,则第一个单选按钮的检查值设置为 true,第二个设置为 !true (false)。在 Model.isTimer 为 false 的另一种情况下,第一个单选按钮检查值设置为 false,第二个设置为 !false (true)。

    希望能解决问题。

    【讨论】:

    • 谢谢马特。我会尝试并告诉你。为了简化第二个问题,当表单再次可见/加载时,您将如何确保用户选择的前一个单选按钮将被保留。换句话说,如果我选择 YES 单选按钮然后访问其他表单(单选按钮表单现在将被隐藏),然后返回单选按钮表单,我想要 YES 单选按钮选中状态!
    • 我更新了我的答案,它现在应该可以解决您的所有问题。如果您通过提交按钮等对服务器进行完全刷新,这应该是您所需要的。除非你是通过 ajax 来做的,否则你不应该需要 javascript。
    【解决方案2】:

    您也可以将设置值视为 htmlAttribute

    例如

    <%= Html.RadioButton("isTimer",new{Value="true", checked="checked"})%> 
    

    这与 m4tt1mus 不同

    希望对你有帮助

    要了解更多信息,请查看此链接 http://www.htmlcodetutorial.com/forms/_INPUT_TYPE_RADIO.html

    【讨论】:

    • 抱歉这个愚蠢的问题,但是 Value=True 和复选框被选中有什么区别?复选框不被选中意味着 Value=True 吗?
    • Value true 设置单选按钮的值(这意味着您可以将任何值放在那里并且选中=> 将其标记为选中
    猜你喜欢
    • 2018-01-23
    • 2012-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-04
    • 1970-01-01
    • 2016-06-22
    • 1970-01-01
    相关资源
    最近更新 更多