public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
dynamic view_model = new ViewModel();
Action<string> TrySetValue = (field) => {
var value = bindingContext.ValueProvider.GetValue(field);
if ( value.IsNotNull() ) { view_model.SetValue(field, value.RawValue); }
};
TrySetValue("id");
controllerContext.RequestContext.HttpContext.Request
.QueryString.AllKeys.ToList().ForEach(x => TrySetValue(x));
controllerContext.RequestContext.HttpContext.Request
.Form.AllKeys.ToList().ForEach(x => TrySetValue(x));
var request = controllerContext.RequestContext.HttpContext.Request;
if( request.IsAjaxRequest() )
{
try
{
byte[] bytes = new byte[request.TotalBytes];
var original_position = request.InputStream.Position;
request.InputStream.Position = 0;
request.InputStream.Read(bytes, 0, request.TotalBytes);
request.InputStream.Position = original_position;
string data = Encoding.UTF8.GetString(bytes);
JavaScriptSerializer serializer = new JavaScriptSerializer();
var dictionary = serializer.Deserialize<Dictionary<string, object>>(data);
dictionary.Keys.ToList().ForEach(x => TrySetValue( x ));
}
catch{}
}
return view_model;
}