Create c# SelectList Without specifying values - c#

When manually creating a select list I normally have both text & value:
SelectList SupplierStatusList = new SelectList(new[] {
new SelectListItem { Selected = false, Text = "Please Select", Value = "Please Select" },
new SelectListItem { Selected = true, Text = "1", Value = "1" },
new SelectListItem { Selected = false, Text = "2", Value = "2" },
new SelectListItem { Selected = false, Text = "3", Value = "3" },
new SelectListItem { Selected = false, Text = "4", Value = "4" },
}, "Value", "Text");
But how do I do this without having to specify the value? This leaves the values = "" which I don't want.
SelectList SupplierStatusList = new SelectList(new[] {
new SelectListItem { Selected = false, Text = "Please Select"},
new SelectListItem { Selected = true, Text = "1"},
new SelectListItem { Selected = false, Text = "2"},
new SelectListItem { Selected = false, Text = "3"},
new SelectListItem { Selected = false, Text = "4"},
}, "Value", "Text");
Any ideas?
Sorry, to be clear yes I would like the text and value to be the same.

As suggested in the comments, you can use a constructor overload:
var selectListItems = new[] {"Please Select", "1", "2", "3"};
var selectList = new SelectList(selectListItems, "1");

Related

ASP.NET Core 5 MVC: ArgumentNullException: Value cannot be null. (Parameter 'items')

I have this list in the GET method for a create page:
List<string> users = (from c in _context.NR_Users select c.Name).ToList();
users.Insert(0, "Select");
ViewBag.users = users;
It is displayed like this:
<div class="form-group col-md-4">
<label class="control-label">Prepared By</label>
<select asp-for="Prepared_By" name="Prepared_By" class="form-control" asp-items="#(new SelectList(ViewBag.users))"></select>
<span asp-validation-for="Prepared_By" class="text-danger"></span>
</div>
In the model Prepared_By is a string.
On the create page when I hit submit I get the following error:
ArgumentNullException: Value cannot be null. (Parameter 'items')
pointing to
<select asp-for="Prepared_By" name="Prepared_By" class="form-control" asp-items="#(new SelectList(ViewBag.users))"></select>
There are a couple things I find really interesting about this issue. First of all, in the POST method for the create page if I print the value of Prepared_By it always prints the correct name:
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create([Bind("ID,State_Project_Number,Federal_Project_Number,Name,Route_Number,County,Work_Type,Coordinates,Project_Description,Federal_Aid,Minimal_Project_Verification,CE_Category,Amms,Activities_Agreement,Arch_RE,Hist_RE,Arch_RE_Date,Hist_RE_Date,Through_Lanes,Close_Road,ROW_Acquisition,Access_Control,Fifty_Year_Structure,Agency_Coordination,IPAC_Screening_Zone,Section_404_Permit,Ground_Disturbance,Waterway,Special_Use_Permit,Floodplain,Prepared_By,Approved_By,Adduser,Date_Added")] TypeOne typeOne, bool Assessment)
{
System.Diagnostics.Debug.WriteLine("Prepared by: " + typeOne.Prepared_By);
if (ModelState.IsValid)
{
typeOne.Adduser = User.Identity.Name;
typeOne.Date_Added = DateTime.Today;
System.Diagnostics.Debug.WriteLine("Prepared by again: " + typeOne.Prepared_By);
_context.Add(typeOne);
await _context.SaveChangesAsync();
}
}
However when I try to print it a second time inside the if(ModelState.IsValid) it does not work.
What else is interesting is that I use this exact same list in a different create page and it works just fine:
<div class="form-group col-md-3">
<label class="control-label">DSN PM</label>
<select asp-for="DSN_PM" name="DSN_PM" class="form-control" asp-items="#(new SelectList(ViewBag.users))"></select>
<span asp-validation-for="DSN_PM" class="text-danger"></span>
</div>
public async Task<IActionResult> Create([Bind("ID,State_Project_Number,Federal_Project_Number,Project_Name,County,Memo_Date,From,Authorization,DSN_PM,History,History_PM,Review_Exempt_H,SHPO_Approval_H,Archaeology,Archaeology_PM,Review_Exempt_A,SHPO_Approval_A,ESA_Key,Crayfish,Crayfish_Habitat_Assessment,NLEB_4D,USFWS,USFWS_Type,Mussel_Habitat,Mussel_Stream,Within_Airport,ToPo_Quad_Name,Bat_Habitat,Bars,Coordinates,Natural_Resources_Notes,Adduser,Date_Added,Crayfish_Notes,Mussel_Notes")] Project_Screen project_Screen)
{
if (ModelState.IsValid)
{
project_Screen.Adduser = User.Identity.Name;
project_Screen.Date_Added = DateTime.Today;
_context.Add(project_Screen);
await _context.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}
return View(project_Screen);
}
In the second example I create the list in the exact same way in the GET method and I have never had this issue. What could be the problem?
EDIT: Update from question
Controller:
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create([Bind("ID,State_Project_Number,Federal_Project_Number,Name,Route_Number,County,Work_Type,Coordinates,Project_Description,Federal_Aid,Minimal_Project_Verification,CE_Category,Amms,Activities_Agreement,Arch_RE,Hist_RE,Arch_RE_Date,Hist_RE_Date,Through_Lanes,Close_Road,ROW_Acquisition,Access_Control,Fifty_Year_Structure,Agency_Coordination,IPAC_Screening_Zone,Section_404_Permit,Ground_Disturbance,Waterway,Special_Use_Permit,Floodplain,Prepared_By,Approved_By,Adduser,Date_Added")] TypeOne typeOne, bool Assessment)
{
System.Diagnostics.Debug.WriteLine("Prepared by: " + typeOne.Prepared_By);
if (ModelState.IsValid)
{
typeOne.Adduser = User.Identity.Name;
typeOne.Date_Added = DateTime.Today;
System.Diagnostics.Debug.WriteLine("Prepared by again: " + typeOne.Prepared_By);
_context.Add(typeOne);
await _context.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}
//set the data for ViewBag.users..
List<string> users = (from c in _context.NR_Users select c.Name).ToList();
users.Insert(0, "Select");
ViewBag.users = users;
return View(typeOne);
}
View:
<div class="form-group col-md-4">
<label class="control-label">Prepared By</label>
<select asp-for="Prepared_By" name="Prepared_By" class="form-control" asp-items="#(new SelectList(ViewBag.users,"Id","Name"))"></select>
<span asp-validation-for="Prepared_By" class="text-danger"></span>
</div>
There are a couple of problems here. First of all, the problem persists and nothing has changed. I'm not sure if the code for the view is correct at all, but it is giving me a Object reference not set to an instance of an object. error but I don't really know what it's pointing to. I also don't know why you added ID because I don't use that anywhere and I don't need to.
EDIT 2:
GET method:
// GET: TypeOnes/Create
public IActionResult Create()
{
List<string> users = (from c in _context.NR_Users select c.Name).ToList();
users.Insert(0, "Select");
ViewBag.users = users;
List<string> adminLeads = (from s in _context.NR_Users
where s.User_Type == "Admin" || s.User_Type == "Unit Leader"
select s.Name).ToList();
adminLeads.Insert(0, "Select");
ViewBag.adminLeads = adminLeads.ToList();
List<SelectListItem> options = new()
{
new SelectListItem { Value = "True", Text = "Yes" },
new SelectListItem { Value = "False", Text = "No" }
};
options.Insert(0, new SelectListItem { Value = "Select" });
ViewBag.options = options;
List<SelectListItem> assessments = new()
{
new SelectListItem { Value = "Mussel", Text = "Mussel" },
new SelectListItem { Value = "Crayfish", Text = "Crayfish" },
new SelectListItem { Value = "Both", Text = "Both" },
new SelectListItem { Value = "No", Text = "No" }
};
assessments.Insert(0, new SelectListItem { Value = "Select" });
ViewBag.options = assessments;
List <SelectListItem> reTypes = new()
{
new SelectListItem { Value = "Appendix A short form", Text = "Appendix A short form" },
new SelectListItem { Value = "Review exempt", Text = "Review exempt" },
new SelectListItem { Value = "SHPO", Text = "SHPO" },
new SelectListItem { Value = "Programatic Agreement", Text = "Programatic Agreement" }
};
reTypes.Insert(0, new SelectListItem { Value = "Select", Text = "Select" });
ViewBag.reTypes = reTypes;
List <SelectListItem> counties = new()
{
new SelectListItem { Value = "Barbour", Text = "Barbour County" },
new SelectListItem { Value = "Berkeley", Text = "Berkeley County" },
new SelectListItem { Value = "Boone", Text = "Boone County" },
new SelectListItem { Value = "Braxton", Text = "Braxton County" },
new SelectListItem { Value = "Cabell", Text = "Cabell County" },
new SelectListItem { Value = "Calhoun", Text = "Calhoun County" },
new SelectListItem { Value = "Clay", Text = "Clay County" },
new SelectListItem { Value = "Doddridge", Text = "Doddridge County" },
new SelectListItem { Value = "Fayette", Text = "Fayette County" },
new SelectListItem { Value = "Gilmer", Text = "Gilmer County" },
new SelectListItem { Value = "Grant", Text = "Grant County" },
new SelectListItem { Value = "Greenbrier", Text = "Greenbrier County" },
new SelectListItem { Value = "Hampshire", Text = "Hampshire County" },
new SelectListItem { Value = "Hancock", Text = "Hancock County" },
new SelectListItem { Value = "Hardy", Text = "Hardy County" },
new SelectListItem { Value = "Harrison", Text = "Harrison County" },
new SelectListItem { Value = "Jackson", Text = "Jackson County" },
new SelectListItem { Value = "Jefferson", Text = "Jefferson County" },
new SelectListItem { Value = "Kanawha", Text = "Kanawha County" },
new SelectListItem { Value = "Lewis", Text = "Lewis County" },
new SelectListItem { Value = "Lincoln", Text = "Lincoln County" },
new SelectListItem { Value = "Logan", Text = "Logan County" },
new SelectListItem { Value = "Marion", Text = "Marion County" },
new SelectListItem { Value = "Marshall", Text = "Marshall County" },
new SelectListItem { Value = "Mason", Text = "Mason County" },
new SelectListItem { Value = "McDowell", Text = "McDowell County" },
new SelectListItem { Value = "Mercer", Text = "Mercer County" },
new SelectListItem { Value = "Mineral", Text = "Mineral County" },
new SelectListItem { Value = "Mingo", Text = "Mingo County" },
new SelectListItem { Value = "Monongalia", Text = "Monongalia County" },
new SelectListItem { Value = "Monroe", Text = "Monroe County" },
new SelectListItem { Value = "Morgan", Text = "Morgan County" },
new SelectListItem { Value = "Nicholas", Text = "Nicholas County" },
new SelectListItem { Value = "Ohio", Text = "Ohio County" },
new SelectListItem { Value = "Pendleton", Text = "Pendleton County" },
new SelectListItem { Value = "Pleasants", Text = "Pleasants County" },
new SelectListItem { Value = "Pocahontas", Text = "Pocahontas County" },
new SelectListItem { Value = "Preston", Text = "Preston County" },
new SelectListItem { Value = "Putnam", Text = "Putnam County" },
new SelectListItem { Value = "Raleigh", Text = "Raleigh County" },
new SelectListItem { Value = "Randolph", Text = "Randolph County" },
new SelectListItem { Value = "Ritchie", Text = "Ritchie County" },
new SelectListItem { Value = "Roane", Text = "Roane County" },
new SelectListItem { Value = "Summers", Text = "Summers County" },
new SelectListItem { Value = "Taylor", Text = "Taylor County" },
new SelectListItem { Value = "Tucker", Text = "Tucker County" },
new SelectListItem { Value = "Tyler", Text = "Tyler County" },
new SelectListItem { Value = "Upshur", Text = "Upshur County" },
new SelectListItem { Value = "Wayne", Text = "Wayne County" },
new SelectListItem { Value = "Webster", Text = "Webster County" },
new SelectListItem { Value = "Wetzel", Text = "Wetzel County" },
new SelectListItem { Value = "Wirt", Text = "Wirt County" },
new SelectListItem { Value = "Wood", Text = "Wood County" },
new SelectListItem { Value = "Wyoming", Text = "Wyoming County" }
};
ViewBag.counties = counties;
return View();
}
If I recreate every list in the POST method then I don't get any errors anywhere, it simply sends me back to the create page and does not perform the database insert
POST method:
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create([Bind("ID,State_Project_Number,Federal_Project_Number,Name,Route_Number,County,Work_Type,Coordinates,Project_Description,Federal_Aid,Minimal_Project_Verification,CE_Category,Amms,Activities_Agreement,Arch_RE,Hist_RE,Arch_RE_Date,Hist_RE_Date,Through_Lanes,Close_Road,ROW_Acquisition,Access_Control,Fifty_Year_Structure,Agency_Coordination,IPAC_Screening_Zone,Section_404_Permit,Ground_Disturbance,Waterway,Special_Use_Permit,Floodplain,Prepared_By,Approved_By,Adduser,Date_Added")] TypeOne typeOne, string Assessment, bool Bat)
{
List<string> users = (from c in _context.NR_Users select c.Name).ToList();
users.Insert(0, "Select");
ViewBag.users = users;
List<string> adminLeads = (from s in _context.NR_Users
where s.User_Type == "Admin" || s.User_Type == "Unit Leader"
select s.Name).ToList();
adminLeads.Insert(0, "Select");
ViewBag.adminLeads = adminLeads.ToList();
List<SelectListItem> options = new()
{
new SelectListItem { Value = "True", Text = "Yes" },
new SelectListItem { Value = "False", Text = "No" }
};
options.Insert(0, new SelectListItem { Value = "Select" });
ViewBag.options = options;
List<SelectListItem> assessments = new()
{
new SelectListItem { Value = "Mussel", Text = "Mussel" },
new SelectListItem { Value = "Crayfish", Text = "Crayfish" },
new SelectListItem { Value = "Both", Text = "Both" },
new SelectListItem { Value = "No", Text = "No" }
};
assessments.Insert(0, new SelectListItem { Value = "Select" });
ViewBag.assessments = assessments;
List<SelectListItem> reTypes = new()
{
new SelectListItem { Value = "Appendix A short form", Text = "Appendix A short form" },
new SelectListItem { Value = "Review exempt", Text = "Review exempt" },
new SelectListItem { Value = "SHPO", Text = "SHPO" },
new SelectListItem { Value = "Programatic Agreement", Text = "Programatic Agreement" }
};
reTypes.Insert(0, new SelectListItem { Value = "Select", Text = "Select" });
ViewBag.reTypes = reTypes;
List<SelectListItem> counties = new()
{
new SelectListItem { Value = "Barbour", Text = "Barbour County" },
new SelectListItem { Value = "Berkeley", Text = "Berkeley County" },
new SelectListItem { Value = "Boone", Text = "Boone County" },
new SelectListItem { Value = "Braxton", Text = "Braxton County" },
new SelectListItem { Value = "Cabell", Text = "Cabell County" },
new SelectListItem { Value = "Calhoun", Text = "Calhoun County" },
new SelectListItem { Value = "Clay", Text = "Clay County" },
new SelectListItem { Value = "Doddridge", Text = "Doddridge County" },
new SelectListItem { Value = "Fayette", Text = "Fayette County" },
new SelectListItem { Value = "Gilmer", Text = "Gilmer County" },
new SelectListItem { Value = "Grant", Text = "Grant County" },
new SelectListItem { Value = "Greenbrier", Text = "Greenbrier County" },
new SelectListItem { Value = "Hampshire", Text = "Hampshire County" },
new SelectListItem { Value = "Hancock", Text = "Hancock County" },
new SelectListItem { Value = "Hardy", Text = "Hardy County" },
new SelectListItem { Value = "Harrison", Text = "Harrison County" },
new SelectListItem { Value = "Jackson", Text = "Jackson County" },
new SelectListItem { Value = "Jefferson", Text = "Jefferson County" },
new SelectListItem { Value = "Kanawha", Text = "Kanawha County" },
new SelectListItem { Value = "Lewis", Text = "Lewis County" },
new SelectListItem { Value = "Lincoln", Text = "Lincoln County" },
new SelectListItem { Value = "Logan", Text = "Logan County" },
new SelectListItem { Value = "Marion", Text = "Marion County" },
new SelectListItem { Value = "Marshall", Text = "Marshall County" },
new SelectListItem { Value = "Mason", Text = "Mason County" },
new SelectListItem { Value = "McDowell", Text = "McDowell County" },
new SelectListItem { Value = "Mercer", Text = "Mercer County" },
new SelectListItem { Value = "Mineral", Text = "Mineral County" },
new SelectListItem { Value = "Mingo", Text = "Mingo County" },
new SelectListItem { Value = "Monongalia", Text = "Monongalia County" },
new SelectListItem { Value = "Monroe", Text = "Monroe County" },
new SelectListItem { Value = "Morgan", Text = "Morgan County" },
new SelectListItem { Value = "Nicholas", Text = "Nicholas County" },
new SelectListItem { Value = "Ohio", Text = "Ohio County" },
new SelectListItem { Value = "Pendleton", Text = "Pendleton County" },
new SelectListItem { Value = "Pleasants", Text = "Pleasants County" },
new SelectListItem { Value = "Pocahontas", Text = "Pocahontas County" },
new SelectListItem { Value = "Preston", Text = "Preston County" },
new SelectListItem { Value = "Putnam", Text = "Putnam County" },
new SelectListItem { Value = "Raleigh", Text = "Raleigh County" },
new SelectListItem { Value = "Randolph", Text = "Randolph County" },
new SelectListItem { Value = "Ritchie", Text = "Ritchie County" },
new SelectListItem { Value = "Roane", Text = "Roane County" },
new SelectListItem { Value = "Summers", Text = "Summers County" },
new SelectListItem { Value = "Taylor", Text = "Taylor County" },
new SelectListItem { Value = "Tucker", Text = "Tucker County" },
new SelectListItem { Value = "Tyler", Text = "Tyler County" },
new SelectListItem { Value = "Upshur", Text = "Upshur County" },
new SelectListItem { Value = "Wayne", Text = "Wayne County" },
new SelectListItem { Value = "Webster", Text = "Webster County" },
new SelectListItem { Value = "Wetzel", Text = "Wetzel County" },
new SelectListItem { Value = "Wirt", Text = "Wirt County" },
new SelectListItem { Value = "Wood", Text = "Wood County" },
new SelectListItem { Value = "Wyoming", Text = "Wyoming County" }
};
ViewBag.counties = counties;
System.Diagnostics.Debug.WriteLine("Prepared by: " + typeOne.Prepared_By);
if (ModelState.IsValid)
{
typeOne.Adduser = User.Identity.Name;
typeOne.Date_Added = DateTime.Today;
System.Diagnostics.Debug.WriteLine("Prepared by again: " + typeOne.Prepared_By);
var prep = typeOne.Prepared_By;
typeOne.Prepared_By = prep;
_context.Add(typeOne);
await _context.SaveChangesAsync();
//Send all History and Archaeology Unit Leaders an email
List<string> histAndArchLeads = (from s in _context.NR_Users
where s.User_Type == "Unit Leader" && s.Unit == "History" || s.Unit == "Archaeology"
select s.Email_Address).ToList();
foreach(var email in histAndArchLeads)
{
SendEmail(email);
}
//Send an email to Traci if project needs a Mussel or Crayfish habitat assessement (Natural resources Lead)
if (Assessment != "No" )
{
SendEmail("Cole.k.perry#wv.gov");
}
//Send an email to bat lady if project needs a bat habitat assessement
if (Bat)
{
SendEmail("Cole.k.perry#wv.gov");
}
return RedirectToAction(nameof(Index));
}
return View(typeOne);
}
Can you please check the ASP.NET <form /> element? It should look like this:
<form asp-controller="MyController" asp-action="MyAction" method="post">
<!-- Your controls and etc -->
</form>
First of all, in the POST method for the create page if I print the value of Prepared_By it always prints the correct name
Of course it will print the correct value, because you post the data to backend successfully. But you need to know the dropdown populated data is not stored by Prepared_By. It stores value by using asp-items="#(new SelectList(ViewBag.users))". You do not set the ViewBag.users in your post method, that is why it makes ArgumentNullException error when you post back.
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create([Bind("ID,State_Project_Number,Federal_Project_Number,Name,Route_Number,County,Work_Type,Coordinates,Project_Description,Federal_Aid,Minimal_Project_Verification,CE_Category,Amms,Activities_Agreement,Arch_RE,Hist_RE,Arch_RE_Date,Hist_RE_Date,Through_Lanes,Close_Road,ROW_Acquisition,Access_Control,Fifty_Year_Structure,Agency_Coordination,IPAC_Screening_Zone,Section_404_Permit,Ground_Disturbance,Waterway,Special_Use_Permit,Floodplain,Prepared_By,Approved_By,Adduser,Date_Added")] TypeOne typeOne, bool Assessment)
{
System.Diagnostics.Debug.WriteLine("Prepared by: " + typeOne.Prepared_By);
if (ModelState.IsValid)
{
typeOne.Adduser = User.Identity.Name;
typeOne.Date_Added = DateTime.Today;
System.Diagnostics.Debug.WriteLine("Prepared by again: " + typeOne.Prepared_By);
_context.Add(typeOne);
await _context.SaveChangesAsync();
}
//set the data for ViewBag.users..
List<string> users = (from c in _context.NR_Users select c.Name).ToList();
users.Insert(0, "Select");
ViewBag.users = users;
//return View("ViewName", typeOne);
//if you return Create.cshtml, no need specify the view name
return View(typeOne);
}
As per your second way, be sure to debug your code and to see when it goes. It is impossible if you do not set value for ViewBag.users when you populate the dropdown. Be careful if any difference.
Here is a whole simple working demo:
Model:
public class Test
{
public string Id{ get; set; }
public string Name { get; set; }
}
public class TestModel
{
public string Prepared_By { get; set; }
}
View(Create.cshtml):
Besides, you need use public SelectList(IEnumerable items, string dataValueField, string dataTextField); which will display the correct value and text for dropdown.
model TestModel
<form method="post">
<select asp-for="Prepared_By" name="Prepared_By" class="form-control"
asp-items="#(new SelectList(ViewBag.users,"Id","Name"))"></select>
<input type="submit" value="Post" />
</form>
Controller:
[HttpGet]
public IActionResult Create()
{
var data = new List<User>()
{
new User(){ Id="1",Name= "aa" },
new User(){ Id="2",Name= "bb" },
new User(){ Id="3",Name= "cc" }
};
ViewBag.users = data;
return View();
}
[HttpPost]
public IActionResult Create(TestModel model)
{
ViewBag.users = new List<Test>()
{
new Test(){ MenuCategoryId="1",Content= "aa" },
new Test(){ MenuCategoryId="2",Content= "bb" },
new Test(){ MenuCategoryId="3",Content= "cc" }
};
return View(model);
}
I figured it out. I abstracted the drop down lists to a 3rd method DropDowns() and then called that method in both the GET and POST methods:
public void DropDowns()
{
List<string> users = (from c in _context.NR_Users select c.Name).ToList();
users.Insert(0, "Select");
ViewBag.users = users;
List<string> adminLeads = (from s in _context.NR_Users
where s.User_Type == "Admin" || s.User_Type == "Unit Leader"
select s.Name).ToList();
adminLeads.Insert(0, "Select");
ViewBag.adminLeads = adminLeads.ToList();
List<SelectListItem> options = new()
{
new SelectListItem { Value = "True", Text = "Yes" },
new SelectListItem { Value = "False", Text = "No" }
};
options.Insert(0, new SelectListItem { Value = "Select" });
ViewBag.options = options;
List<SelectListItem> assessments = new()
{
new SelectListItem { Value = "Mussel", Text = "Mussel" },
new SelectListItem { Value = "Crayfish", Text = "Crayfish" },
new SelectListItem { Value = "Both", Text = "Both" },
new SelectListItem { Value = "No", Text = "No" }
};
assessments.Insert(0, new SelectListItem { Value = "Select" });
ViewBag.assessments = assessments;
List<SelectListItem> reTypes = new()
{
new SelectListItem { Value = "Appendix A short form", Text = "Appendix A short form" },
new SelectListItem { Value = "Review exempt", Text = "Review exempt" },
new SelectListItem { Value = "SHPO", Text = "SHPO" },
new SelectListItem { Value = "Programatic Agreement", Text = "Programatic Agreement" }
};
reTypes.Insert(0, new SelectListItem { Value = "Select", Text = "Select" });
ViewBag.reTypes = reTypes;
List<SelectListItem> counties = new()
{
new SelectListItem { Value = "Barbour", Text = "Barbour County" },
new SelectListItem { Value = "Berkeley", Text = "Berkeley County" },
new SelectListItem { Value = "Boone", Text = "Boone County" },
new SelectListItem { Value = "Braxton", Text = "Braxton County" },
new SelectListItem { Value = "Cabell", Text = "Cabell County" },
new SelectListItem { Value = "Calhoun", Text = "Calhoun County" },
new SelectListItem { Value = "Clay", Text = "Clay County" },
new SelectListItem { Value = "Doddridge", Text = "Doddridge County" },
new SelectListItem { Value = "Fayette", Text = "Fayette County" },
new SelectListItem { Value = "Gilmer", Text = "Gilmer County" },
new SelectListItem { Value = "Grant", Text = "Grant County" },
new SelectListItem { Value = "Greenbrier", Text = "Greenbrier County" },
new SelectListItem { Value = "Hampshire", Text = "Hampshire County" },
new SelectListItem { Value = "Hancock", Text = "Hancock County" },
new SelectListItem { Value = "Hardy", Text = "Hardy County" },
new SelectListItem { Value = "Harrison", Text = "Harrison County" },
new SelectListItem { Value = "Jackson", Text = "Jackson County" },
new SelectListItem { Value = "Jefferson", Text = "Jefferson County" },
new SelectListItem { Value = "Kanawha", Text = "Kanawha County" },
new SelectListItem { Value = "Lewis", Text = "Lewis County" },
new SelectListItem { Value = "Lincoln", Text = "Lincoln County" },
new SelectListItem { Value = "Logan", Text = "Logan County" },
new SelectListItem { Value = "Marion", Text = "Marion County" },
new SelectListItem { Value = "Marshall", Text = "Marshall County" },
new SelectListItem { Value = "Mason", Text = "Mason County" },
new SelectListItem { Value = "McDowell", Text = "McDowell County" },
new SelectListItem { Value = "Mercer", Text = "Mercer County" },
new SelectListItem { Value = "Mineral", Text = "Mineral County" },
new SelectListItem { Value = "Mingo", Text = "Mingo County" },
new SelectListItem { Value = "Monongalia", Text = "Monongalia County" },
new SelectListItem { Value = "Monroe", Text = "Monroe County" },
new SelectListItem { Value = "Morgan", Text = "Morgan County" },
new SelectListItem { Value = "Nicholas", Text = "Nicholas County" },
new SelectListItem { Value = "Ohio", Text = "Ohio County" },
new SelectListItem { Value = "Pendleton", Text = "Pendleton County" },
new SelectListItem { Value = "Pleasants", Text = "Pleasants County" },
new SelectListItem { Value = "Pocahontas", Text = "Pocahontas County" },
new SelectListItem { Value = "Preston", Text = "Preston County" },
new SelectListItem { Value = "Putnam", Text = "Putnam County" },
new SelectListItem { Value = "Raleigh", Text = "Raleigh County" },
new SelectListItem { Value = "Randolph", Text = "Randolph County" },
new SelectListItem { Value = "Ritchie", Text = "Ritchie County" },
new SelectListItem { Value = "Roane", Text = "Roane County" },
new SelectListItem { Value = "Summers", Text = "Summers County" },
new SelectListItem { Value = "Taylor", Text = "Taylor County" },
new SelectListItem { Value = "Tucker", Text = "Tucker County" },
new SelectListItem { Value = "Tyler", Text = "Tyler County" },
new SelectListItem { Value = "Upshur", Text = "Upshur County" },
new SelectListItem { Value = "Wayne", Text = "Wayne County" },
new SelectListItem { Value = "Webster", Text = "Webster County" },
new SelectListItem { Value = "Wetzel", Text = "Wetzel County" },
new SelectListItem { Value = "Wirt", Text = "Wirt County" },
new SelectListItem { Value = "Wood", Text = "Wood County" },
new SelectListItem { Value = "Wyoming", Text = "Wyoming County" }
};
ViewBag.counties = counties;
}
GET:
// GET: TypeOnes/Create
public IActionResult Create()
{
DropDowns();
return View();
}
POST:
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create([Bind("ID,State_Project_Number,Federal_Project_Number,Name,Route_Number,County,Work_Type,Coordinates,Project_Description,Federal_Aid,Minimal_Project_Verification,CE_Category,Amms,Activities_Agreement,Arch_RE,Hist_RE,Arch_RE_Date,Hist_RE_Date,Through_Lanes,Close_Road,ROW_Acquisition,Access_Control,Fifty_Year_Structure,Agency_Coordination,IPAC_Screening_Zone,Section_404_Permit,Ground_Disturbance,Waterway,Special_Use_Permit,Floodplain,Prepared_By,Approved_By,Adduser,Date_Added")] TypeOne typeOne, string Assessment, bool Bat)
{
DropDowns();
if (ModelState.IsValid)
{
typeOne.Adduser = User.Identity.Name;
typeOne.Date_Added = DateTime.Today;
_context.Add(typeOne);
await _context.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}
return View(typeOne);
}
And it started working.

How to drag line between list of items in Controller in MVC

I want to drag a line between country and its region in dropdown list.
This is the code where I want to drag a line in end of new SelectListItem {Value = "GB", Text = "Great Britain" } like -----------------. Please guide me. Thank you in advance.
RacingRegionsOptions = new List<SelectListItem>
{
new SelectListItem {Value = "NZ", Text="New Zealand" },
new SelectListItem {Value = "AUS", Text = "Australia" },
new SelectListItem {Value = "FR", Text = "France" },
new SelectListItem {Value = "GB", Text = "Great Britain" },
new SelectListItem {Value = "1", Text = "Australia & New
Zealand" },
new SelectListItem {Value = "2", Text = "South East Asia" },
new SelectListItem {Value = "3", Text = "Principal Europe" },
new SelectListItem {Value = "4", Text = "All Europe" },
new SelectListItem {Value = "5", Text = "Soutern Hemisphere" },
}
In my opinion, the most clean solution would be use a JS library on your View that implements a item divider, (such as Select2) but if you really want to implement on your server SelectList, you can try this:
new SelectListItem {Value = "", Text = "---------------------------", Disabled = true },
(I don't really think this is a good idea)
You may consider rendering the SELECT options using optgroup. The optgroup element creates a grouping of options within a select element. The Html.DropDownListFor helper method supports rendering select element with optgroup!
var other = new SelectListGroup() {Name = "------Other----"};
var items = new List<SelectListItem>
{
new SelectListItem {Value = "NZ", Text = "New Zealand"},
new SelectListItem {Value = "AUS", Text = "Australia"},
new SelectListItem {Value = "FR", Text = "France"},
new SelectListItem {Value = "GB", Text = "Great Britain"},
new SelectListItem {Value = "1", Text = "Australia & New Zealand", Group = other},
new SelectListItem {Value = "2", Text = "South East Asia", Group = other},
new SelectListItem {Value = "3", Text = "Principal Europe", Group = other},
new SelectListItem {Value = "4", Text = "All Europe", Group = other},
new SelectListItem {Value = "5", Text = "Soutern Hemisphere", Group = other}
};
// Use items variable to initialize to set the value of RacingRegionsOptions
This will wrap the last 5 items inside an optgroup which has the label ------Other----.
optgroup is used to group the option items in the UI. User cannot select the group as the selected option.

Dropdown not selecting correct value

what is wrong withe following code?
#Html.DropDownListFor(model => model.title, new List<SelectListItem>
{
new SelectListItem { Text = "Other" , Value = "Other"},
new SelectListItem { Text = "Mr", Value = "Mr" },
new SelectListItem { Text = "Mrs", Value = "Mrs" },
new SelectListItem { Text = "Ms", Value = "Ms" },
new SelectListItem { Text = "Miss", Value = "Miss" }
},
new { #class = "form-control" })
the above is allowing me to select and save the value to the table, but when it come to edit , the saved value is not selected
for example the existing Data was saved with "Mr" when editing it shows "Other"
why?
Try to use SelectList with this overload following way:
#Html.DropDownListFor(model => model.title, new SelectList(new List<SelectListItem>
{
new SelectListItem { Text = "Other" , Value = "Other"},
new SelectListItem { Text = "Mr", Value = "Mr" },
new SelectListItem { Text = "Mrs", Value = "Mrs" },
new SelectListItem { Text = "Ms", Value = "Ms" },
new SelectListItem { Text = "Miss", Value = "Miss" }
},
"Value",
"Text",
Model.Title),
new { #class = "form-control" })
SelectList Constructor (IEnumerable, String, String, String, Object)
public SelectList(
IEnumerable items,
string dataValueField,
string dataTextField,
string dataGroupField,
Object selectedValue
)
this is worst
it is working in this cause but not the one above
#Html.DropDownListFor(model => model.PreferredContact, new List<SelectListItem>
{
new SelectListItem { Text = "Other" },
new SelectListItem { Text = "Telephone", Value = "Telephone" } ,
new SelectListItem { Text = "Email", Value = "Email" },
new SelectListItem { Text = "Post", Value = "Post" }
}, new { #class = "form-control" })
okay
i found the issue
you cannot have "title" as the name. title is a property on HTML5. i renamed the field to dTitle and it works

Dropdown Selected item working in DropDownList but not in DropDownListFor - MVC

I am not able to identify why DropDownListFor is not selecting the correct option. Below is my code, I have hard-coded 'Selected' values for testing but still when page loads I am getting 'Select Country' as selected value.
#Html.DropDownListFor(x => x.CountryID,
new List<SelectListItem> {
new SelectListItem { Text = "USA", Value = "US", Selected = false},
new SelectListItem { Text = "UK", Value = "UK", Selected = true},
new SelectListItem { Text = "Australia", Value = "AUS", Selected = false }
},"Select Country")
But, same is working fine for DropDownList!
#Html.DropDownList("CountryID",
new List<SelectListItem> {
new SelectListItem { Text = "USA", Value = "US", Selected = false},
new SelectListItem { Text = "UK", Value = "UK", Selected = true},
new SelectListItem { Text = "Australia", Value = "AUS", Selected = false }
},"Select Country")
Please Help.
The selected option will be based on the actual value of property CountryID when you use the strongly type helper. So if you set CountryID="UK" in the controller before you pass the model to the view, then the second option will be selected.
Try the following:
#{
var listItems = new List<SelectListItem>
{
new SelectListItem { Text = "USA", Value = "USA" },
new SelectListItem { Text = "UK", Value = "UK", Selected = true },
new SelectListItem { Text = "Australia", Value = "AUS" }
};
}
#Html.DropDownListFor(x => x.CountryID, listItems, "-- Select Country --")

Multiselect chosen dropdown - want to set values

Please let me know how can I set the selected value in the chosen multiselect dropdownlist. I have tried everything available on net but nothing is working.
My view is
#Html.DropDownListFor(
model => model.SelectedSkills,
new SelectList(
Model.SkillList,
"Value",
"Text",
Model.SelectedSkills
),
new {
#class = "chosen",
id = "ddlSkill",
name="ddlPersonSkill",
#tabindex = "4",
multiple = "true"
}
)
#Html.HiddenFor(
model => model.SelectedSkills,
new { id = "hdnPersonSkill" }
)
Now in page load I need to display the selected value :
var personskill = $("#hdnPersonSkill").val();
$('#ddlSkill option:nth-child(3)').attr('selected', 'selected');
$('#ddlSkill').trigger('liszt:updated');
But above code is not working
CHHTML:
#Html.ListBoxFor(
model => model.SelectedSkills,
new SelectList(
Model.SkillList,
"Value",
"Text",
Model.SelectedSkills
),
new
{
#class = "chosen",
id = "ddlSkill",
name = "ddlPersonSkill",
#tabindex = "4",
multiple = "true"
}
)
Javascript to show all selected:
$(document).ready(function () {
var conceptName = $('#ddlSkill').find(":selected").text();
alert(conceptName);
});
Model jsut for example:
public string[] SelectedSkills { get; set; }
public IEnumerable<SelectListItem> SkillList { get; set; }
public MyModel()
{
SkillList = new List<SelectListItem>();
((List<SelectListItem>)SkillList).Add(new SelectListItem { Text = "Skill 1", Value = "1" });
((List<SelectListItem>)SkillList).Add(new SelectListItem { Text = "Skill 2", Value = "2" });
((List<SelectListItem>)SkillList).Add(new SelectListItem { Text = "Skill 3", Value = "3" });
((List<SelectListItem>)SkillList).Add(new SelectListItem { Text = "Skill 4", Value = "4" });
SelectedSkills = new string[3];
SelectedSkills[0] = "1";
SelectedSkills[1] = "2";
SelectedSkills[2] = "3";
}

Categories

Resources