Category / Section
How to prevent the default behavior of MVC converting String.Empty to null values?
1 min read
The default behavior of MVC to convert String.Empty to null values while binding model values from the client to server-end. Because of this, Empty String (“ ”) values formed in the filtered query will be changed to the null values while receiving them in the server-end.
To overcome this problem, DefaultModelBinder can be inherited and prevent the conversion of String.Empty to the null values.
Razor:
@using Syncfusion.JavaScript.Models
@(Html.EJ().Grid<OrdersView>("Grid")
.AllowPaging()
.Datasource(ds =>
{
ds.URL("/Home/UrlDataSource");
ds.Adaptor(AdaptorType.UrlAdaptor);
})
.AllowFiltering()
.FilterSettings(filter=>filter.FilterType(FilterType.Excel).BlankValue(""))
.Columns(col =>
{
col.Field("OrderID").HeaderText("Order ID")
.TextAlign(TextAlign.Right).Add();
col.Field("EmployeeID").HeaderText("EmployeeID")
.TextAlign(TextAlign.Right).Add();
col.Field("Freight").HeaderText("Freight")
.TextAlign(TextAlign.Right)
.Format("{0:C}").Add();
col.Field("CustomerID").HeaderText("Customer ID").Add();
col.Field("ShipRegion").Type(ColumnType.String).HeaderText("ShipRegion").Add();
})
)
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
public ActionResult UrlDataSource([ModelBinder(typeof(EmptyStringModelBinder))]DataManager dm)
{
IEnumerable DataSource = OrderRepository.GetAllRecords();
DataOperations ds = new DataOperations();
if (dm.Where != null && dm.Where.Count > 0)
{
DataSource = ds.PerformWhereFilter(DataSource, dm.Where, dm.Where[0].Operator);
}
var count = DataSource.Cast<EditableOrder>().Count();
if ((dm.Skip == 0 || dm.Take == null) && (dm.Take == 0 || dm.Take == null))
return Json(new { result = DataSource, count = count });
DataSource = ds.PerformSkip(DataSource, dm.Skip);
DataSource = ds.PerformTake(DataSource, dm.Take);
return Json(new { result = DataSource, count = count });
}
public class EmptyStringModelBinder : DefaultModelBinder
{
public override object BindModel(ControllerContext controllerContext,
ModelBindingContext bindingContext)
{
bindingContext.ModelMetadata.ConvertEmptyStringToNull = false;
Binders = new ModelBinderDictionary() { DefaultBinder = this };
return base.BindModel(controllerContext, bindingContext);
}
}
}
Check the result after and before applying the Model binder.
Figure 1. Values before applying Model Binder
Figure 2. Values after applying Model binder
Didn't find an answer?
Contact Support