Skip to main content

Posts

Showing posts from April, 2010

Breaking? Change In Asp.Net MVC2

In MVC1, by default an empty textbox was sent as string.Empty to the controller on POST. In MVC2, it now sends the value as NULL. See ModelMetadata.ConvertEmptyStringToNull. I think there are some valid reasons for why they made the change – see Brad Wilson’s comment for more. If your system relies on string.Empty, you’ve got a problem. There are several options for handling this. The first is using the DisplayFormatAttribute on every property that needs it. Painful. Here’s an example:[DisplayFormat(ConvertEmptyStringToNull=false)] public string FirstName { get; set; }You can also write a custom binder that sets this value to false. Like so:public class CustomStringModelBinder : DefaultModelBinder { public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) { var value = bindingContext.ValueProvider.GetValue(bindingContext.ModelName); if (bindingContext.ModelType == typeof(string)) { bin…

Navigation Using Areas in Asp.Net MVC

Asp.Net MVC2 introduced Areas as a feature part of the framework. Areas allow you to divide your application into logical units. It also makes your Url’s look more accurate. Thinking of a generic store they might have areas such as Inventory, Payroll, Employees and Sales. Here are example ActionLinks for each area.<%= Html.ActionLink("Home", "Index", "Home", new { area = "" }, new { })%> <%= Html.ActionLink("Payroll", "Index", "Main", new { area = "Payroll" }, new { })%> <%= Html.ActionLink("Inventory", "Index", "Main", new { area = "Inventory" }, new { })%> <%= Html.ActionLink("Employees", "Index", "Main", new { area = "Employees" }, new { })%> <%= Html.ActionLink("Sales", "Index", "Main", new { area = "Sales" }, new { })%>Notice that the area is passed as a…