Scenario:
Past month I got a chance to work on MVC 2 project. While there is lot of tutorial available but a real project always have its own learning.
One of the requirement was to have parent-child drop down for Country-State information. State Drop down will be hidden until Country is selected.
Assumptions:
1. Country is the master drop down
2. State drop down will be child drop down and is wrapped in div 'StateArea'
3. On selection of Country , State drop down should get values.
4. View Model class is 'AssociatedViewModel'
Solution: JQuery was the solution. JQuery will make a ajax call to the GetStates() action in Controller to get all the states for selcted country.
View ( Script ):
<script language="javascript" type="text/javascript">View ( View HTML ):
window.onload = function () {
// Load the form values collection in variable
var frmCollection = $(":input");
$('#CountryID').change(function (e) {
if ($('#CountryID').val() == 0)
{
$("#StateArea").hide(); // Hide the div containing state drop down
}
else
{
$.ajax({
url: "GetStates",
data: frmCollection,
type: "GET",
datatype: "json",
success: function (result) {
$("#StateArea").show(); // Show the div containing state drop down
$("#State").empty();
$("#State").append("<option selected='true'>Select State</option>");
$.each(result, function (i, item)
{
$("#State").append("<option value='" + item.Value + "'>" + item.Text + "</option>");
});
},
error: function (result) {
}
});
}
});
</script>
<% Html.EnableClientValidation(); %>Controller:
<% using (Html.BeginForm())
{%>
<fieldset>
<table> <tr>
<th>
<b>Category Of Recommendation : </b>
</th>
<th>
<%= Html.DropDownListFor(model => model.Country, Model.Countries,
"Select Country", new { Title = "Country", style = "width:auto" })%>
</th>
</tr>
<tr id="specificRecommendationArea">
<th>
<b>Specific Recommendation : </b>
</th>
<th>
<%= Html.DropDownListFor(model => model.State , Model.States ,
"Select States", new { Title = "States", style = "width:auto" })%>
</th>
</tr>
</table>
</fieldset>
<%} %>
public ActionResult GetSpecificRecommendations(AssociatedViewModel viewModel)Article:
{
SomeDataServiceClient client = new SomeDataServiceClient();
viewModel.States = new SelectList(wcfclient.GetAllStatesByCountry(viewModel.Country.Value), "State", "Description");
return Json(viewModel.States, JsonRequestBehavior.AllowGet);
}
0 comments:
Post a Comment