MVC 5 checking RadioButtonFor based on model - asp.net-mvc

I have a problem for which I just can't find a solution.
Checking button like this works:
#Html.RadioButtonFor(x => x.an2[0], 3, Model.an2[0]==3
? new { id = "B", #checked = "checked" } : null)
But I also need to set id, how do I do that? This code:
#Html.RadioButtonFor(x => x.an2[0], 3, Model.an2[0]==3
? new { id = "B", #checked = "checked" } : new { id = "B" })
Gives error:
Type of conditional expression cannot be determined because there is no implicit conversion between 'AnonymousType#1' and 'AnonymousType#2'
Which is beyond my understanding.
I suppose there should be a trivial solution to this?

Cast them to object:
Html.RadioButtonFor(x => x.an2[0], 3, Model.an2[0]==3
? (object)new { id = "B", #checked = "checked" } : (object)new { id = "B" });

Check this link.
#{string id = ViewData.TemplateInfo.GetFullHtmlFieldId("radioTrue");}
#Html.RadioButtonFor(x => x.an2[0], 3, Model.an2[0]==3 ? new { id } : null)
A good example of this is here.

Related

Condition of html helper not working

I want the disabled attribute be added to a textbox based on a condition
#Html.TextBoxFor(m => m.kidsNumber, new { (Model.kidsDropDown != "2") ? "#disabled" : ""})
Use
#Html.TextBoxFor(m => m.kidsNumber, Model.kidsDropDown != "2" ? new {disabled = "disabled"} : null )
Note also if you need to add multiple attributes, then it needs to be in the format (where the attributes are cast to object
#Html.TextBoxFor(m => m.kidsNumber, Model.kidsDropDown != "2" ? (object)new { #disabled = "disabled", #class="form-control" } : (object)new { #class="form-control" })
If you have multiple textboxes that use the same sets of attributes, you can assign these to variables in the view
#{
object number = new { #type = "number", #class="form-control" };
object disabledNumber = new { #disabled = "disabled", #class="form-control" };
}
and in the form
#Html.TextBoxFor(m => m.kidsNumber, Model.kidsDropDown != "2" ? disabledNumber : number)
#Html.TextBoxFor(m => m.anotherProperty, AnotherCondition ? disabledNumber : number)
.....
You have not said which attribute you want to set ::
you code is without attribute and you should use
use readonly instead because disabled fields are not posted on form submit
#Html.TextBoxFor(m => m.kidsNumber, new { (Model.kidsDropDown != "2") ? "#disabled" : ""})
For Disabled attribute Use::
#Html.TextBoxFor(m => m.kidsNumber, Model.kidsDropDown != "2" ? new {disabled = "disabled"} : null )
For readonly Use something like::
#Html.TextBoxFor(m => m.kidsNumber, new { #readonly= (Model.kidsDropDown != "2" ? "readonly" : "")})

Default Empty Option for MVC dropdown menu

I have the following DropDownListFor that displays a list of states for the user to choose from. How can I default the dropdown to be empty. It currently defaults to the first state in alphabetical order ("Alaska")
#Html.DropDownListFor(m => m.User.StateID,
new SelectList(Model.User.States.Where(filter => filter.Active && (filter.CountryID == 1))
.Select(item => new
{
ID = item.StateProvinceID,
Description = item.Name
}),
"ID",
"Description",
Model.User.StateID),
new { #data_bind = "value: user.StateID, enable:!isSiteUser()", tabindex = "10" })
I figured out that one of the posted questions did have the correct answer for my problem. I was just trying to do use it incorrectly. I was adding "string.Empty" to the wrong location. This is the solution.
#Html.DropDownListFor(m => m.User.StateID,
new SelectList(Model.User.States.Where(filter => filter.Active && (filter.CountryID == 1))
.Select(item => new
{
ID = item.StateProvinceID,
Description = item.Name
}),
"ID",
"Description",
Model.User.StateID),
string.Empty,
new { #data_bind = "value: user.StateID, enable:!isSiteUser()", tabindex = "10" })

Conditional enabled / disable asp.net mvc textbox

This is what I tried:
#Html.TextBoxFor(model => model.EntryDate, new { style="width:90px;",((_new || _modify) ? #disabled="disabled":"") }) #Html.ValidationMessageFor(model => model.EntryDate)
The following will work because there is only one html attribute
#Html.TextBoxFor(m => m.EntryDate, (_new || _modify)
? new { #disabled = "disabled" }
: null)
However once you add the style attribute, this will generate an error because there is no implicit conversion between new { #disabled = "disabled", #Style="width:90px;" } and new { #Style="width:90px;" } so you need to do this in an if block
#if(_new || _modify) {
#Html.TextBoxFor(m => m.EntryDate, new { #disabled = "disabled", style="width:90px;")}
} else {
#Html.TextBoxFor(m => m.EntryDate, new { style="width:90px;" })
}
Edit
Casting the html dictionary to object seems to work but I've not fully tested this (and I'm not sure that its "a simple and elegant way to to it")
#Html.TextBoxFor(m => m.EntryDate, (_new || _modify)
? (object)new { #disabled = "disabled", style="width:90px;" }
: (object)new { style="width:90px;" })
I am not sure but try this one:
#Html.TextBoxFor(model => model.EntryDate, (_new || _modify) ? new{ #Style="width:90px;", #Disabled="disabled"} : new{ #Style="width:90px;"})

RadioButtonFor Usage

Here is my code:
_testPartial.cshtml(Partial view)
#Html.RadioButtonFor(model => model.CardType, "G", new { #checked = #Model.IsGold})
#Html.RadioButtonFor(model => model.CardType, "P", new { #checked = #Model.IsPlatinum})
#Html.RadioButtonFor(model => model.CardType, "B", new { #checked = #Model.IsBusiness})
Controller
public PartialViewResult ShowCardtype()
{
Model cardType= new Model {
IsGold=true,
IsPlatinum=false,
IsBusiness=false};
return PartialView("_testPartial",cardType);
}
The expected behavior is, the GOLD radio button option should have been selected in the form. But it always selects the last option. I tried returning "checked" string, but no luck. Appreciate any help.
the second option is the selected option, you don't need the new part.
#Html.RadioButtonFor(model => model.CardType, "G")
#Html.RadioButtonFor(model => model.CardType, "P")
#Html.RadioButtonFor(model => model.CardType, "B")
when you load the view set model.CardType to G, P, or B and it will select the correct radio button

How to use trim on DropdownlistFor

Benefit Set: </label><br />
<%: Html.DropDownListFor(model => model.bvODSMapping.Benefit_Set, Model.BenefitSet,new {id="BSet", style = "width:230px;" })%>
When I am using model=>model.bvODSMapping.Benefit_Set.Trim()
I am getting Value Can not be null.
can anybody help me out how to trim the string?
Thanks
I guess it would be the best to trim the values before passing the model to your view.
Nevertheless, this might help:
#Html.DropDownListFor(
model =>
model.bvODSMapping.Benefit_Set,
Model.BenefitSet.Select(
item =>
new SelectListItem
{
Selected = item.Selected,
Text = item.Text.Trim(),
Value = item.Value
}),
new { id = "BSet", style = "width:230px;" })

Resources