I have a drop down list control on a partial view and after posting the form the state of the drop down list control is not maintained
Here is the partial view cshtml code:
@model MvcApplication1.Models.TestCriteriaConsolidated
@using (Html.BeginForm("Results", "Home"))
{
<div style="float:left">
<div style="font-weight:bold">
@Html.LabelFor(m => m.testCriteria.Year)
</div>
<div style="width:110px; ">
@Html.DropDownListFor(m => m.testCriteria.Year, new SelectList(new[]
{
new SelectListItem{ Text="All Years", Value=" " },
new SelectListItem{ Text="2010", Value="2010" },
new SelectListItem{ Text="2009", Value="2009" },
new SelectListItem{ Text="2008", Value="2008" },
new SelectListItem{ Text="2007", Value="2007" },
new SelectListItem{ Text="2006", Value="2006" }
}, "Value", "Text", "1"), new { @style = "width: 100px; margin-top: 5px" })
</div>
</div>
<div style="float:left">
<div>
</div>
<div style="width:100px; ">
<input type="submit" value="Results" />
</div>
</div>
}
Here is my controler code:
public ActionResult Index()
{
return View();
}
public ActionResult Results()
{
string year = Request.Form["testCriteria.Year"];
List<TestCriteriaResults> test = new List<TestCriteriaResults>();
test.Add(new TestCriteriaResults { Value1 = "one", Value2 = "one", Value3="three", Value4="Four" });
test.Add(new TestCriteriaResults { Value1 = "one", Value2 = "two", Value3="three", Value4="four" });
test.Add(new TestCriteriaResults { Value1 = "one", Value2 = "two", Value3 = "three", Value4 = "four" });
test.Add(new TestCriteriaResults { Value1 = "one", Value2 = "two", Value3 = "three", Value4 = "four" });
test.Add(new TestCriteriaResults { Value1 = "one", Value2 = "two", Value3 = "three", Value4 = "four" });
TestCriteriaConsolidated combined = new TestCriteriaConsolidated();
combined.testCriteriaResults = test;
return PartialView(combined);
}
NEWLY MODIFIED ACTION METHOD(This still does not maintain state):
public ActionResult Results()
{
string year = Request.Form["testCriteria.Year"];
List<TestCriteriaResults> test = new List<TestCriteriaResults>();
test.Add(new TestCriteriaResults { Value1 = "one", Value2 = "one", Value3="three", Value4="Four" });
test.Add(new TestCriteriaResults { Value1 = "one", Value2 = "two", Value3="three", Value4="four" });
test.Add(new TestCriteriaResults { Value1 = "one", Value2 = "two", Value3 = "three", Value4 = "four" });
test.Add(new TestCriteriaResults { Value1 = "one", Value2 = "two", Value3 = "three", Value4 = "four" });
test.Add(new TestCriteriaResults { Value1 = "one", Value2 = "two", Value3 = "three", Value4 = "four" });
TestCriteriaConsolidated combined = new TestCriteriaConsolidated();
TestCriteria criteria = new TestCriteria() { Year = year };
combined.testCriteriaResults = test;
combined.testCriteria = criteria;
return PartialView(combined);
}
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
The following code creates the view model for your next partial view:
TestCriteriaConsolidated combined = new TestCriteriaConsolidated(); combined.testCriteriaResults = test;
You need to set the year on this model:
combined.testCriteria.Year = Request.Form["testCriteria.Year"];
Method 2
combined.testCriteria.Year needs to get set with the form value you posted
Try this
[HttpPost]
public ActionResult Results(TestCriteriaConsolidated form)
{
List<TestCriteriaResults> test = new List<TestCriteriaResults>();
test.Add(new TestCriteriaResults { Value1 = "one", Value2 = "one", Value3 = "three", Value4 = "Four" });
test.Add(new TestCriteriaResults { Value1 = "one", Value2 = "two", Value3 = "three", Value4 = "four" });
test.Add(new TestCriteriaResults { Value1 = "one", Value2 = "two", Value3 = "three", Value4 = "four" });
test.Add(new TestCriteriaResults { Value1 = "one", Value2 = "two", Value3 = "three", Value4 = "four" });
test.Add(new TestCriteriaResults { Value1 = "one", Value2 = "two", Value3 = "three", Value4 = "four" });
TestCriteria criteria = new TestCriteria() { Year = form.testCriteria.Year };
TestCriteriaConsolidated combined = new TestCriteriaConsolidated
{
testCriteriaResults = test,
testCriteria = criteria
};
return View(combined);
}
public ActionResult Results()
{
return View(new TestCriteriaConsolidated());
}
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0