2015-03-11 6 views
3

У меня есть флажок и кнопка:Как получить значение флажка из FormCollection?

@using(Html.BeginForm()) 
{ 
    <div id="search-block"> 
     <input type="checkbox" name="showAll" id="showAll">Include completed 
     <input type="submit" value="Apply"/> 
    </div> 
} 

и второй вещь в контроллере:

[HttpPost] 
public ActionResult Index(FormCollection collection) 
{ 
    var showAll = collection["showAll"]; 
    TempData["showAll"] = showAll; 

    ... 
    something 
    ... 
} 

Это на самом деле работает, НО:

Если флажки не установлены, я получаю нуль (меня не сильно беспокоит).

Если отмечены флажки, я получаю «on» от FormCollection, и это не то, что мне нужно. Я хочу получить истинное или ложное.

Как я могу это сделать?

+1

Вы можете поместить в поле скрытое поле с таким же именем, что и в поле "false". , тогда, если они не будут отмечать флажок, значение, отправленное в форме, будет ложным. Если они это проверят, вы получите «on, false», но вы можете сортировать это в своем контроллере bool x = (collection ["showAll"] == 'false') –

+0

Это шутка? –

+0

nope - если вы посмотрите на фоне того, как некоторые из фреймворков имеют дело с флажками, вы найдете скрытое поле, выполняющее это - оно гарантирует, что что-то опубликовано на сервере –

ответ

20
<input type="checkbox" name="showAll" id="showAll">Include completed 

разместим значение "on" или "off".

Это WONT привязка к логическому,

Чтобы получить логическое значение, которое вы можете использовать HTML Helper Checkbox Как

@Html.CheckBox("showAll") 
<label for="showAll" style="display:inline">Include completed</label> 

Update:

If проверил html-помощник, отправит обратнои если бесконтрольно, как "false"

Вы можете иметь это временное решение, как

bool MyBoolValue= Convert.ToBoolean(collection["showAll"].Split(',')[0]); 

Это потому, что хелперы класс Html добавляет дополнительный hidden поле, чтобы сохранить состояние флажка

+0

Затем ... как он должен выглядеть с помощью html-помощника? Не могли бы вы написать его, пожалуйста? –

+0

@OlegsJasjko отредактировал – Tushar

+0

Ну, я получил истинное и ложное ... но я получил их как «true, false», когда был установлен флажок. Есть ли способ их разделить? –

0

I было трудно заставить это работать, и это решение, которое я придумал. Я показываю его с помощью html-помощника.

@Html.CheckBoxFor(model => model.showAll, new { @class = "form-control", Name = "showAll"}) 

Здесь я продолжал падать, и следующие работы.

bool MyBoolValue= (collection["showAll"] ?? "").Equals("true", StringComparison.CurrentCultureIgnoreCase); 
0

Я попытался с ввода тега и он работает, как показано ниже:

<form method="post"> 
    <input type="checkbox" id="chkRmb" name="chkRmb" /> Remember Me? 
    <input type="submit" value="Log In" class="btn btn-default login-btn" /> 
</form> 

В контроллере, сравните значение строки и превратить свой в булево.

bool rmbMe = (formdata["chkRmb"] ?? "").Equals("on", StringComparison.CurrentCultureIgnoreCase); 
0

Так что я дал этому выстрел, и он, казалось, рад принять его, где коллекция мой FormCollection объект:

if (collection.AllKeys.Contains("Inactive")) 
{ 
    np.Inactive = false; 
} 
else 
{ 
    np.Inactive = true; 
} 

Пожалуйста, обратите внимание, что имя целевого элемента сбивает с толку - но это был целью, которую я искал.

0

Попробуйте это, он решил эту же проблему для меня. Думал, что я поделюсь им, если другие придут к этому вопросу в будущем.

[HttpPost] 
public ActionResult Index(FormCollection collection) 
{ 
    Boolean tempValue = collection["showAll"] != null ? true : false; 
    TempData["showAll"] = tempValue; 

    ... 
    something 
    ... 
} 
Смежные вопросы