在动作方法中,如何将post数据绑定到动态对象
In an action method, how can I bind post data to a dynamic object?
我想这样做:
public ActionResult SaveStuff(dynamic vm) {
StoreTheValue(vm.myvalue);
return Content("Saved :)");
}
这不起作用,MVC似乎不想创建一个具有与请求的post数据对应的属性的动态对象。
现在我知道,正确定义视图模型的整个点是创建强类型的数据结构,并有MVC绑定数据到他们,但鉴于我张贴的数据从javascript使用ajax它不是强类型的数据,所以我没有看到,我失去了任何可维护性通过这样做,它将节省我的时间和精力创建视图模型类。
有没有人可以帮助建议我如何将post数据绑定到动态对象,可能使用自定义模型绑定器?
实现此目的的一种可能方法是使用自定义模型绑定器,假设您将Json发送到操作
public class DynamicBinder : IModelBinder
{
public object BindModel( ControllerContext controllerContext, ModelBindingContext bindingContext )
{
using( var streamReader = new StreamReader( controllerContext.HttpContext.Request.InputStream ) )
{
return JsonConvert.DeserializeObject< dynamic >( streamReader.ReadToEnd() );
}
}
}
那么在你的操作中你可以告诉它,使用自定义绑定
public ActionResult SaveStuff([ModelBinder(typeof(DynamicBinder))]dynamic vm) {
StoreTheValue(vm.myvalue);
return Content("Saved :)");
}
然后像这样发布你的json:
{
"myvalue":{...}
}
dynamic
类型和ajax请求,你做的javascript 是不对应的。
你总是可以在javascript端创建你的强类型对象属性。
无论如何,你可以这样使用FormCollection
:
[HttpPost]
public ActionResult yourAction(FormCollection collection)
{
StoreTheValue(Convert.ToString(collection["myvalue"]));
return Content("Saved :)");
}
相关文章:
- 在VanillaJS中模拟模型双向数据绑定
- Telerik rad组合框多列数据绑定
- 数据绑定:'系统Char'不包含名为'xxxxx'
- OnsenUI AngularJS数据绑定无法正常工作
- Ionic-item在导航栏中进行双向数据绑定
- 基本D3.js:如何将具有其他属性的数据绑定到元素
- 使用自定义数据属性或将数据绑定到处理程序来处理事件
- ListView的ItemTemplate内的自定义HtmlControl的数据绑定失败
- $http中的Angular 1数据绑定承诺不起作用
- 在何处和何时添加具有数据绑定的元素
- 使用AngularJs数据绑定的三元运算符显示图像
- 为什么针对工厂的Angular数据绑定只适用于函数
- 敲除:如何使用可见数据绑定可见来隐藏段落标记
- 在数据绑定中使用对象敲除绑定
- 如何在angularjs中检查Kendo树视图数据绑定事件
- 将json数据绑定到剑道网格
- AngularJS数据绑定中断ngRepeat+奇怪行为
- JavaScript HTMLElement 属性上的数据绑定 在 Polymer 中
- 视窗 8/Metro UI 数据绑定 JavaScript
- 在动作方法中,如何将post数据绑定到动态对象