Yii2 checkbox unchecked by default - yii2

How can I render the checkbox unchecked by default?.
I try this.
<?=$form->field($model, 'rememberMe', ['template' => "<div>{input}</div>\n<div>{error}</div>"])->checkbox(['checked'=>false])?>
But no way. It allways appends checked="checked" to the html. I need the checkbox to be unchecked for the first time.

Try using value = false
<?=$form->field($model, 'rememberMe',
['template' => "<div>{input}</div>\n<div>{error}</div>"])->
checkbox(['value' => false])?>
or (simply) assign $model->rememberMe = false;

This is very useful. only need to set true or false.
For example :-
$model->"CHECKBOX NAME" as true or false
Simply

Related

How to get email checkbox checked by default?

I have defined connection alternatives for email and SMS. I want to have email checked by default.
I wondered if I can add attribute checked in Razor without changing model or controller.
Because if I use plain HTML, then it works but with Razor and when I inspection the page, there is no checked attribute.
#checked = "checked"
#checked = checked
#checked = "true"
#checked = true
new{#checked = "checked"}
<div class="checkbox-wrapper">
<label>
#Html.CheckBoxFor(m => m.Email, new { #class = "form-check-input", id = "E-post", #checked = "checked" })
<label for="E-post">E-post</label>
</label>
</div>
email checkbox checked when the page is loaded
I found that CheckBoxFor does not have an attribute checked. The solution is to use CheckBox and then the second attribute is the boolean true or false which is the answer to the attribute isChecked.
#Html.CheckBox("name",true,new {#class="className",id="idName"})
In your controller action,set Model.Email=true;.
this link might help you, set a CheckBox by default Checked

Mark Checkbox if text box has text

I have a checkboxfor and a textboxfor. If a user enters text into the textboxfor I would like the corresponding checkboxfor to be automatically checked for the user. With the option of course to un-check it if they change their mind.
#Html.CheckBoxFor(m => m.FirstPledge)
#Html.TextBoxFor(m => m.FirstPledgeText, new { #class = "textBoxSize" })
You may listen to the keyup event, check the content in textbox is valid and set the checked property of the checkbox to true.
Here is the code to do so using jQuery.
$(function () {
$("#FirstPledgeText").keyup(function () {
if($.trim($(this).val())!=="")
{
$("#FirstPledge").prop("checked", true);
}
});
})
If you want to uncheck the checkbox when the textbox is empty, add an else part to the if condition and set false for the checked property.
You can do the same in vanilla JavaScript as well if you prefer that.

Disabling checkbox in ASP MVC based on bool property? [duplicate]

My ViewModel has a property of selected and selectable. Both are boolean. I would like my view to have a checkbox that is enabled when selectable is true and disabled when selectable is false. What is the proper razor syntax to accomplish this ?
I tried the code below on a list of items in a table. Every row comes back with a disabled checkbox regardless of selectable value.
#Html.CheckBoxFor(modelItem => item.Selected, new { #disabled = !item.Selectable })
It is not easy to achieve this with an if condition inside the helper method because all the below markups will render a disabled chechbox.
<input type="checkbox" disabled>
<input type="checkbox" disabled="disabled">
<input type="checkbox" disabled="false">
<input type="checkbox" disabled="no">
<input type="checkbox" disabled="enabled">
This should work in the razor. Simple If condition and rendering what you want.
#if(item.Selected)
{
#Html.CheckBoxFor(modelItem => item.Selected)
}
else
{
#Html.CheckBoxFor(modelItem => item.Selected, new { #disabled = "disabled"})
}
You may consider writing a custom html helper which renders the proper markup for this.
This won't work because <input disabled="anything" /> will result in a disabled control. You need to only have a #disabled property when it should be disabled.
Try something like this:
#Html.CheckBoxFor(modelItem => item.Selected, item.Selectable ? (object)new {} : (object)new { #disabled = "disabled" })
Note that you might need to cast to (object)
The problem is when you have to add more than 1 HTML attribute.
That's a mess:
#if(item.Selected)
{
#Html.CheckBoxFor(modelItem => item.Selected, new { #data_foo = "bar"})
}
else
{
#Html.CheckBoxFor(modelItem => item.Selected, new { #data_foo = "bar", #disabled = "disabled"})
}
What I do to solve this is to use a IDictionary<string, object> that is previously loaded:
var htmlAttributes = new Dictionary<string, object>{
{"data-foo", "bar"}
};
if(!item.Selected)
{
htmlAttributes.Add("disabled", "disabled");
}
And then I create the checkbox component only once:
#Html.CheckBoxFor(modelItem => item.Selected, htmlAttributes)
Sorry, my previous answer was wrong.
The input-element will be disabled as soon as it gets the attribute disabled. It doesn't matter if the value is true, false. In HTML you can't set disabled to false.
So you will have to set the disabled attribute only when the condition is valid.
something like:
object attributes = null;
if (!item.Selectable)
{
attributes = new { disabled = "disabled"};
}
#Html.CheckBoxFor(modelItem => item.Selected, attributes)

Is there a way to set the For property of label otherwise than ID of an element?

I've this code for a view (ASP.NET MVC3), and I'm trying to add a for attribute on both the labels
#Html.RadioButtonFor(m => m.Sanctioned, true, new { #checked = "checked"})
<label For="">Yes</label>
#Html.RadioButtonFor(m => m.Sanctioned, false, new { })
<label For="">No</label>
I know it can be assigning an ID to both the radio buttons and refer them in For attribute of Labels respectively, but the situation here is, when I'm setting the IDs other than default, my Model is not getting posted back to controller. So, is there any way or work around to assign For attribute of Label control to point to the Radio buttons? Any suggestion or Feedback is highly appreciated.
This always works normal for me without "For" attribute and Label:
#Html.RadioButtonFor(m => m.Sanctioned, true, new { #checked = "checked"}) Yes
#Html.RadioButtonFor(m => m.Sanctioned, false) No
May be I don't understand your question currectly, but why you really need it?

Bind Data to a Label MVC4

I'm going to bind data to a label using MVC4,But it's not success..Data come to model.
Here is my code.
<div class="newclass">
#Html.LabelFor(m => m.NewsTeam.NewsMgr, new { style = "width:100%", #class = "newcssval" })
</div>
Try like this:
#Html.LabelFor(m => Model.NewsTeam.NewsMgr)
or use DisplayFor
#Html.DisplayFor(m => m.NewsTeam.NewsMgr)
Hope it helps
This will only give you the name of the field (or it's display value from the class). I suspect what you need is the following.
#Html.TextBoxFor(m => m.NewsTeam.NewsMgr,
new { #class = "newcssval", #readonly = true })
This will give you a read-only text box wuth the content of your model data.
Hope that helps.
If your intent is to simply show the value of the property, use the Display or DisplayFor helper:
#Html.DisplayFor(m => m.NewsTeam.NewsMgr)
Or, forget the helper entirely:
#Model.NewsTeam.NewsMgr
If the property contains HTML, you'll need to use the Raw helper:
#Html.Raw(Model.NewsTeam.NewsMgr)
Use this,
#Model.NewsTeam.NewsMgr
It will just show the value of property as label
Or Use,
#Html.DisplayFor(m => m.NewsTeam.NewsMgr)