Reputation: 749
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);
}
Upvotes: 1
Views: 2013
Reputation: 12567
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());
}
Upvotes: 0
Reputation: 18125
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"];
Upvotes: 1