First we build a Controller that has an action to output our view and an action to accept posts
1: [HandleError]2: public class HomeController : Controller
3: {4: public ActionResult Index()
5: {6: UserModel userModel = new UserModel(){UserId = 1,Type = UserTypes.User};
7: 8: return View(userModel);
9: } 10: 11: [AcceptVerbs(WebRequestMethods.Http.Post)]12: public ActionResult UpdateUserType(UpdateUser input)
13: {14: var result = new {Succss = true, Message = "Updated"};
15: return Json(result);
16: } 17: }Here is a quick over view of the model objects we are going to be using
1: public class UserModel
2: {3: public int UserId { get; set; }
4: public UserTypes Type { get; set; }
5: } 6: 7: public enum UserTypes
8: { 9: User = 1, 10: PowerUser = 2, 11: Admin = 3 12: } 13: 14: public class UpdateUser
15: {16: public int UserId { get; set; }
17: public UserTypes Type { get; set; }
18: }The view is a very simple and strongly typed for the UserModel, first build the select control
1: <select name="SelectUserType" onchange="UpdateUserType(this,<%=Model.UserId%>)">
2: <%foreach (UserTypes item in Enum.GetValues(typeof(UserTypes)).Cast<UserTypes>())
3: {4: if(item == Model.Type)
5: {6: %><option selected="selected" value="<%=((int)item).ToString() %>"><%=item.ToString() %></option><%
7: }8: else
9: {10: %><option value="<%=((int)item).ToString() %>"><%=item.ToString() %></option><%
11: } 12: } %> 13: </select>Next we add the javascript function(fyi this requires Jquery)
1: <script type="text/javascript">
2: function UpdateUserType(sender, userId) {
3: var model = { UserId: userId, Type: sender.value };
4: $.post("/home/UpdateUserType",
5: model,6: function (data) {
7: 8: alert("Was Successful: " + data.Succss);
9: alert("Message: " + data.Message);
10: }); 11: } 12: </script>A quick and easy way to add Ajax to any control and as always here is a link to the demo project http://bob-the-janitor-sample-code.googlecode.com/svn/trunk/ajaxMadeEasy/