Я работаю над приложением ASP.NET MVC 4. Это приложение имеет базовую форму. Модель моей формы выглядит следующим образом:
public class MyModel
{
public string Name { get; set; }
public bool Remember { get; set; }
}
В моей форме есть следующий HTML-код.
<input id="Name" name="Name" type="text" value="@Model.Name" />
<input id="Remember" name="Remember" type="checkbox" value="@Model.Remember" />
<label for="Remember"> Remember Me?</label>
Когда я публикую форму, значение «Запомнить» в модели всегда ложно. Однако свойство Name в модели имеет значение. Я проверил это, установив точку останова следующим образом:
[HttpPost]
public ActionResult MyAction(MyModel model)
{
Console.WriteLine(model.Remember.ToString());
}
Я не могу этого понять. Почему не устанавливается значение флажка?
c#
asp.net-mvc-4
JQuery Mobile
источник
источник
Ответы:
Сгенерирует:
Как это работает:
checkbox
флажок не установлен, форма отправляет толькоhidden
значение (false)true
дляbool
свойства модели.<input id="Remember" name="Remember" type="checkbox" value="@Model.Remember" />
Это всегда будет отправлять значение по умолчанию, если отмечено.
источник
Поскольку вы используете Model.Name для установки значения. Я предполагаю, что вы передаете в View пустую модель представления.
Таким образом, значение Remember - false, а значение элемента флажка - false. Это означает, что, когда вы затем устанавливаете этот флажок, вы публикуете значение «false» с формой. Если вы не выберете его, он не будет опубликован, поэтому по умолчанию используется значение false. Вот почему в обоих случаях вы видите ложное значение.
Значение передается, только если вы установите флажок. Чтобы установить флажок в Mvc, используйте
или если вы не хотите привязывать модель к виду.
Mvc творит чудеса со скрытым полем, чтобы сохранять значения, когда они не выбраны.
Изменить, если у вас действительно есть отвращение к этому и вы хотите создать элемент самостоятельно, вы можете это сделать.
источник
@Html.CheckboxFor
Код должен быть на самом деле@Html.CheckBoxFor
@(Model.Remember ? "checked=\"checked\"" : "")
радио-кнопку? или это невозможноtype="radio"
, и выбрать тот , который вы хотите , выбранный в HTML такой же , как и выше,checked="checked"
. Разница в том, что у вас будет несколько<input />
элементов с одинаковым именем. Вам нужно решить, к какому из них применить дополнительный HTML.@Html.CheckBoxFor(x => x.Remember)
это сработало для меняИспользуйте только это
источник
$(this).val($(this).is(":checked"));
Вместо того
использовать:
Это даст вам флажок специально для "Запомнить"
источник
Окей, флажок немного странный. Когда вы используете Html-помощник, он генерирует два ввода флажка в разметке, и оба из них передаются как пара имя-значение IEnumerable, если он установлен.
Если он не отмечен в разметке, он передается только в скрытом вводе со значением false.
Так, например, у вас есть разметка:
И в действии контроллера (убедитесь, что имя соответствует имени параметра флажка на контроллере):
Затем в контроллере вы можете делать что-то вроде:
Я знаю, что это не изящное решение. Надеюсь, кто-то здесь может дать несколько указателей.
источник
Чтобы преобразовать значение, возвращаемое флажком в форме, в логическое свойство, я использовал преобразователь сборки ValueProviderResult в настраиваемом ModelBinder.
источник
Если вы работаете с FormCollection, а не с моделью, назначение может быть таким простым, как:
источник
Я столкнулся с аналогичной проблемой и смог вернуть значение флажка, используя флажок, скрытый для и небольшой JQuery, например:
источник
Это было большой проблемой, и кажется, что все должно быть проще. Вот моя установка и решение.
Я использую следующий помощник HTML:
@Html.CheckBoxFor(model => model.ActiveFlag)
Затем в контроллере я проверяю сбор и обработку формы соответственно:
источник
user.IsActive = fc["IsActive"] != "false";
я все еще чувствую себя грязным из-за сравнения строк.Я только что столкнулся с этим (не могу поверить, что он не включается / выключается!)
В любом случае!
Разместит значение «включено» или «выключено».
Это НЕ будет связываться с логическим значением, но вы можете сделать это глупое обходное решение!
источник
источник
Для MVC с использованием Model. Модель:
HTML:
В функции [HttpPost] мы можем получить ее свойства.
источник
Если вы действительно хотите использовать простой HTML (по какой-либо причине), а не встроенные расширения HtmlHelper, вы можете сделать это таким образом.
Вместо того
попробуйте использовать
Вводы флажков в HTML работают так, что, когда они отмечены, они отправляют значение, а когда они не отмечены, они вообще ничего не отправляют (что заставит ASP.NET MVC вернуться к значению по умолчанию для поле,
false
). Кроме того, значение флажка в HTML может быть любым, а не только истинным / ложным, поэтому, если вы действительно хотите, вы даже можете использовать флажок для строкового поля в своей модели.Если вы используете встроенный
Html.RenderCheckbox
, он фактически выводит два входа: флажок и скрытое поле, так что ложное значение отправляется, когда флажок снят (а не просто ничего). Это может вызвать непредвиденные ситуации, например:источник
Для нескольких флажков с одинаковым именем ... Код для удаления ненужного false:
функция
Используй это :
источник
источник
Изменить Помните, как это
Используйте nullable bool в контроллере и откатитесь к false на null, как это
источник
В моем случае я не устанавливал свойство модели «Запомнить» в методе get. Проверьте свою логику в контроллере. Возможно, вы делаете то же самое. Надеюсь, это поможет!
источник
Я прочитал другие ответы и не совсем заставил их работать - так что вот решение, с которым я столкнулся.
Моя форма использует
Html.EditorFor(e => e.Property)
для создания флажка, и, используяFormCollection
в контроллере, он передает строковое значение'true,false'
в контроллер.Когда я обрабатываю результаты, я использую цикл для их просмотра - я также использую
InfoProperty
экземпляр для представления текущего значения модели, оцениваемого из формы.Поэтому вместо этого я просто проверяю, начинается ли возвращаемая строка со слова,
'true'
а затем устанавливаю логическую переменнуюtrue
и передаю ее в модель возврата.источник