ASP .NET MVC - DropDownList OnChange - asp.net-mvc

I want to hide some data when I select a value in my dropdownList.
Example :
When I choose Gender = M, I don't want to see in my Title : Mr. Only Miss or Madame.
Here is my code :
#Html.DropDownListFor(m => m.Gender, new[] {
new SelectListItem() {Text = "M", Value = "M"},
new SelectListItem() {Text = "F", Value = "F"},
}, "---Choose Gender---", new { onchange = "Select();" })
#Html.DropDownListFor(m => m.Title, new[] {
new SelectListItem() {Text = "Mister", Value = "Mr."},
new SelectListItem() {Text = "Madame", Value = "Mme."},
new SelectListItem() {Text = "Miss", Value = "Miss."}
}, "---Choose Title---")
In Javascript Section :
function Select() {
// the code.
}

You can do this with the help of JQuery,
function changeGender()
{
if($('#Gender').val()=='M')
{
$('#Title').html('');
$('#Title').html('<option value="Mister">Mr.</option>');
}
else if($('#Gender').val()=='F')
{
$('#Title').html('');
$('#Title').html('<option value="Madame">Madam</option><option value="Miss">Miss.</option>');
}
else
{
$('#Title').html('');
}
return false;
}
Hope this helps.

Related

Choose which option is selected on pageload of razor html.dropdownlistfor

I have a dropdownlistfor created with razor that displays 2 option : "show" or "hide" and they have a respective value of "0" and "1".
if (Model.Valeur == 0)
{
#Html.DropDownListFor(m => m.Valeur,
new List<SelectListItem> {
new SelectListItem { Value = "0" , Text = "Show", Selected = true },
new SelectListItem { Value = "1" , Text = "Hide" },
}, new { #class = "myselect" })
}
else
{
#Html.DropDownListFor(m => m.Valeur,
new List<SelectListItem> {
new SelectListItem { Value = "0" , Text = "Show" },
new SelectListItem { Value = "1" , Text = "Hide", Selected = true },
}, new { #class = "myselect" })
}
The if condition I made can set the right value on page load, but I was wondering if there was a way to set the selected value with a parameter or another option
Any Information would be gladly aprreciated.
You could use shorthand if to determine which option is selected.
#Html.DropDownListFor(m => m.Valeur,
new List<SelectListItem> {
new SelectListItem { Value = "0" , Text = "Show", Selected = Model.Valeur == 0 },
new SelectListItem { Value = "1" , Text = "Hide", Selected = Model.Valeur != 0 },
}, new { #class = "myselect" })

Get the selected value using from dropdownlist using #Html.DropDownList

Here is the code below. the selected value senda to the controller.
#Html.DropDownList("pagesize", new List<SelectListItem>
{
new SelectListItem() {Text = "10", Value="10"},
new SelectListItem() {Text = "20", Value="20"},
new SelectListItem() {Text = "30", Value="30"},
new SelectListItem() {Text = "40", Value="40"}
}, new { onChange = string.Format("location.href = '{0}'", #Url.Action("Logs", "Logging")) })
Controller:-
public ActionResult Logs(int pagesize=10)
{
}
Remove the onChange attribute and use unobtrusive javascript. The function needs to add the selected value to the url as a route parameter.
var url = '#Url.Action("Logs", "Logging")';
$('#pagesize').change(function() {
location.href = url + '?pagesize=' + $(this).val();
}
Side note: You should be generating the SelectList in the controller, but in any case in can be simplified to
#Html.DropDownList("pagesize", new SelectList(new List<int>(){ 10, 20, 30, 40 }))

Selected value for dropdownlistfor in mvc4

I have created a ViewBag selectlist in Edit action and set the value to be selected as:
ViewBag.Doors = new SelectList(
new[]
{
new {ID = 1, Name="1-Door"},
new {ID = 2, Name="2-Doors"},
new {ID = 3, Name="3-Doors"},
new {ID = 4, Name="4-Doors"},
new {ID = 5, Name="5-Doors"},
new {ID = 6, Name="6-Doors"},
new {ID = 7, Name="7-Doors"}
},
"ID", "Name", advert.Doors);
But in the view the value for the dropdown is not selected by default.
My view code is:
#Html.DropDownListFor(model => model.Doors, (SelectList)ViewBag.Doors, "--Select--")
#Html.ValidationMessageFor(model => model.Doors)
The property Doors will be numeric 1,2,3,..
How will I do it using Annonymous type in ViewBag ?
Overload
Controller Action Method
public ActionResult DropDownListFor()
{
ViewBag.Doors = new SelectList(
new[]
{
new {Value = 1,Text="1-Door"},
new {Value = 2,Text="2-Door"},
new {Value = 3,Text="4-Door"},
new {Value = 4,Text="4-Door"},
new {Value = 5,Text="5-Door"},
new {Value = 6,Text="6-Door"},
new {Value = 7,Text="7-Doors"}
}, "Value", "Text", 7);
return View();
}
View
#Html.DropDownList("Doors")
How will I do it using SelectListItem?
Action Method
[HttpGet]
public ActionResult DropDownListFor()
{
List<SelectListItem> items = new List<SelectListItem>();
items.Add(new SelectListItem { Text = "Action", Value = "0" });
items.Add(new SelectListItem { Text = "Drama", Value = "1" });
items.Add(new SelectListItem { Text = "Comedy", Value = "2",
Selected = true });
items.Add(new SelectListItem { Text = "Science Fiction", Value = "3" });
ViewBag.MovieType = items;
return View();
}
View
#using (Html.BeginForm("Action", "Controller", FormMethod.Post))
{
#Html.DropDownList("MovieType")
}
How will I do it using View Model?
View
#using (Html.BeginForm("Action", "Controller", FormMethod.Post))
{
#Html.DropDownListFor(m => m.Id, Model.DDLList, "Please select");
}
Action Method
[HttpGet]
public ActionResult DropDownListFor()
{
return View(new Models.Dropdown());
}
View Model
public class Dropdown
{
public string Id { get; set; }
public List<SelectListItem> DDLList
{
get
{
return new List<SelectListItem>()
{
new SelectListItem
{
Text = "1-Door",
Value = "1",
Selected = true
},
new SelectListItem
{
Selected = false,
Value = "2",
Text = "2-Door"
}
};
}
}
}

#Html.Dropdownlist(x => x.id, new int) not working

How i can make this work
#using (Html.BeginForm())
{
#Html.ValidationSummary()
<p>MYep #Html.DropDownListFor(x => x.Id, new int {
new SelectListItem() {Text = "asdad", Value = "1"},
new SelectListItem() {Text = "dfgdgd", Value = "2"},
new SelectListItem() {Text = "werwrwt", Value = "3"}, "Choose")
<input type="submit" value="Ok" />
}
Or should I make a IEnumerable list before and give it to dropdownlistfor?
Matt's answer is fine, but it looks like you are using a ViewModel, so you should just put this static list into the view model and reference the list in your View.
ViewModel:
public sealed class MyViewModel
{
public int Id { get; set; }
public List<SelectListItem> IdList
{
get
{
return new List<SelectListItem>
{
new SelectListItem { Text = "asdad", Value = "1" },
new SelectListItem { Text = "dfgdgd", Value = "2" },
new SelectListItem { Text = "werwrwt", Value = "3" }
};
}
}
}
View:
#Html.DropDownListFor(x => x.Id, Model.IdList)
You are declaring an object of type int and populating it with a List of SelectListItems, which will not work.
I think you want something like this... You may have to make some modifications if x.Id is an int and all the dropdown values are strings, but I'm not sure.
#Html.DropDownListFor(x => x.Id, new List<SelectListItem> {
new SelectListItem() {Text = "asdad", Value = "1"},
new SelectListItem() {Text = "dfgdgd", Value = "2"},
new SelectListItem() {Text = "werwrwt", Value = "3"}}, "Choose")

Bind Html.DropDownList with static items

I have to bind an Html.DropDownList with just two items statically.
Text="Yes" Value="1"
Text="No" Value="0"
The important thing is that, I have to set the text and value fields.
How can I do this?
I used this is properly working
#Html.DropDownList("Status", new List<SelectListItem>
{
new SelectListItem{ Text="Active", Value = "1" },
new SelectListItem{ Text="Not-Active", Value = "0" }
})
It is a best practice not to create the SelectList in the view. You should create it in the controller and pass it using the ViewData.
Example:
var list = new SelectList(new []
{
new { ID = "1", Name = "name1" },
new { ID = "2", Name = "name2" },
new { ID = "3", Name = "name3" },
},
"ID", "Name", 1);
ViewData["list"]=list;
return View();
you pass to the constratctor: the IEnumerable objec,the value field the text field and the selected value.
in the View:
<%=Html.DropDownList("list",ViewData["list"] as SelectList) %>
Code below assumes you are using razor view engine if not you will need to convert it.
#{
var listItems = new List<ListItem>();
listItems.Add(new ListItem{Text="Yes", Value="1"});
listItems.Add(new ListItem{Text="No", Value="0"});
}
#Html.DropDownListFor(m=>m.SelectedValue, listItem);
You should consider creating the model in your code instead of the view. Also this would be a good candidate for an editor template.
if you want to be alittle explicity then try
#{
var domainsList = new SelectList(new []
{
new SelectListItem { Text = ".Com", Value = ".com", Selected = true },
new SelectListItem { Text = ".Shopping", Value = ".shopping"},
new SelectListItem { Text = ".Org", Value = ".org"},
new SelectListItem { Text = ".Net", Value = ".net"},
new SelectListItem { Text = ".AE", Value = ".ae"},
new SelectListItem { Text = ".Info", Value = ".info"},
}, "Value", "Text");
}
#Html.DropDownList("TopLevelDomains", domainsList)
This solved it for me:
<td>
#{ var RlistItems = new List<SelectListItem>();
RlistItems.Add(new SelectListItem { Text = "Select Room Type", Value = "0" });
RlistItems.Add(new SelectListItem { Text = "Meeting Room", Value = "1" });
RlistItems.Add(new SelectListItem { Text = "Office", Value = "2" });
RlistItems.Add(new SelectListItem { Text = "Cafeteria", Value = "3" });
}
#Html.DropDownListFor(model=>model.FirstOrDefault().RoomType
,RlistItems,RlistItems[item.RoomType.Value].Selected=true )
</td>
<select asp-for="CountryName" asp-items=#(new List<SelectListItem> { new SelectListItem {Text="India",Value="1" } ,new SelectListItem {Text="Japan",Value="2" }} ) class="form-control">
<option>SELECT COUNTRY -- </option>

Resources