I need to create a select list, preserving the state, which is not part of the model passed to the view. I suppose I should be using a ViewBag to pass a List to the View ? Any advise on implementation and how to preserve the state of the select list (how do I pass the selected value back to action and to the view again (possible ways of doing this) ?
The Action as of now:
public ActionResult Images(string x, string y)
{
//some code
ContentPage cp = this.ContentPage;
return View(cp);
}
//Post to action with same name:
[HttpPost]
public ActionResult Images(string someParameter)
{
ContentPage cp = this.ContentPage;
return View(cp);
}
The view as of now :
@model ContentPage
@{
ViewBag.Title = "Images";
CmsBaseController controller = (this.ViewContext.Controller as CmsBaseController);
}
@using (Html.BeginForm())
{
<div>
//This should go to List<SelectListItem> as I understand
<select name="perpage" id="perpage" onchange='submit();'>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
</div>
}
Thank you!!!
Have you taken a look at this SO question? The answer there looks like it would do the trick if you wanted to use ViewBag/ViewData to pass in that list.
That said, why not just create a quick viewmodel and store it there? It really is a simple way to go.
I don't know what your ContentPage model is but you could certainly make a ContentPageViewModel that has whatever stuff (including the values for the select list) that is necessary for the page.
Example:
It would easy enough, for example, to have a property on the viewmodel to hold the selection and a property that holds some enumeration of possible values. Something like this:
public class MyViewModel
{
...
public int SelectedId { get; set; }
...
public IEnumerable<Choice> Choices { get; set; }
}
where Choice, in my example, is a class that has two properties, one that holds some identifier and the other the text to display. Something like this:
public class Choice
{
public int Id { get; set; }
public string Text { get; set; }
}
And then you could just have, perhaps, a DropDownListFor
which handles the display/selection work for you. Something like this:
@model MyViewModel
@Html.DropDownListFor(model => model.SelectedId, new SelectList(Model.Choices, "Id", "Text"), "Choose... ")
Back in your controller's action, the viewmodel's SelectedId
will get populated with the corresponding Id for the Choice picked view the dropdown.