我在做一个从easyui的datagrid中导出“datagrid里的数据”的功能。
把datagird的data和columns属性以json格式由js传入控制器,如下。
function TestExport() {
if (datagrid_data.total == 0) {
$.messager.alert('提示', "查询结果区域没有数据可导出", 'info');
} else {
var columns = $('#dg').datagrid("options").columns;
//alert(JSON.stringify(columns));
//alert(JSON.stringify(datagrid_data));
$.post("/Export/ExportData", { data: JSON.stringify(datagrid_data), columns: JSON.stringify(columns) }, function (result) {
if (result.success) {
alert(1);
} else {
$.messager.alert('提示', result.msg, 'error');
}
}, "json");
}
}
控制器中的ExportData动作如下:
public ActionResult ExportData([ModelBinder(typeof(JsonBinder))]object data, [ModelBinder(typeof(JsonBinder))]List<Object> columns)
{
//啥都没写
return Json(new { success = true });
}
其中,[ModelBinder(typeof(JsonBinder))]是对传入的string格式的json数据进行反序列化,具体代码如下:
public class JsonBinder : IModelBinder
{
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
//从请求中获取提交的参数数据
var json = controllerContext.HttpContext.Request.Form[bindingContext.ModelName] as string;
//提交参数是对象
if (json.StartsWith("{") && json.EndsWith("}"))
{
Dictionary<string, object> JsonObj = new Dictionary<string, object>();
JObject jsonBody = JObject.Parse(json);