ASP .NET MVC: работа с переключателями в и из View <-> Controller - PullRequest
0 голосов
/ 23 июня 2011

Я пытался заставить работать простой список кнопок ДА / НЕТ, но столкнулся со странными проблемами.Пожалуйста, обратитесь к моим следующим фрагментам кода.

Модель:

                 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 для установки значения 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значение в базе данных, и когда я выбираю НЕТ, он вставляет ИСТИНА!Я могу поменять оператор NOT (!) В View, как показано ниже, но логически это будет неправильно.

                <%= Html.RadioButton("isTimer", !Model.isTimer) %> Yes 
                <%= Html.RadioButton("isTimer", Model.isTimer) %> No 
    
  2. Хотя я написал JAVASCript для установки значения обратно, когда моя форма снова загружается (становится видимым), он всегда возвращает значение переключателя как TRUE после того, как я установил его в True, и всякий раз, когда он загружается, переключатели YES проверяются.Я никогда не проверяю радио кнопку!Ниже приведен HTML-код, полученный при проверке элемента из Chrom!Не знаю, почему радиокнопка ДА устанавливается всегда.

                <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>
    

Любая помощь будет очень признательна!

Спасибо.

Ответы [ 2 ]

2 голосов
/ 23 июня 2011

Похоже, вы просто должны установить свои радио-кнопки следующим образом

  <%= 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).

Надеюсь, что все прояснится.

1 голос
/ 24 июня 2011

также вы можете рассматривать установленное значение как htmlAttribute

например

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

это другой способ, чем m4tt1mus

надеюсь, это поможет

чтобы узнать больше, перейдите по этой ссылке http://www.htmlcodetutorial.com/forms/_INPUT_TYPE_RADIO.html

...