我有一个允许用户输入/编辑新Widget数据的视图.我想将这些数据组成一个json对象并通过AJAX将它发送给我的控制器,这样我就可以在没有回发的情况下在服务器上进行验证.
我已经完成了所有工作,除了我无法弄清楚如何传递数据,所以我的控制器方法可以接受复杂的Widget类型而不是每个属性的单独参数.
所以,如果这是我的对象:
public class Widget
{
public int Id { get; set; }
public string Name { get; set; }
public decimal Price { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我希望我的控制器方法看起来像这样:
public JsonResult Save(Widget widget)
{
...
}
Run Code Online (Sandbox Code Playgroud)
目前,我的jQuery看起来像这样:
var formData = $("#Form1").serializeArray();
$.post("/Widget/Save",
formData,
function(result){}, "json");
Run Code Online (Sandbox Code Playgroud)
我的表单(Form1)为Widget(Id,Name,Price)上的每个属性都有一个输入字段.这很好用,但它最终将Widget的每个属性作为单独的参数传递给我的控制器方法.
有没有一种方法可以"拦截"数据,可能使用ActionFilterAttribute,并在调用控制器方法之前将其反序列化为Widget对象?
假设我有这个:
var a = { A : { AA : 1 }, B : 2 };
Run Code Online (Sandbox Code Playgroud)
有没有办法让我创建一个可以让我引用AA或B的变量?语法是什么样的?
// I know I can do this:
a['B']; // 2
a['A']['AA']; // 1
// something like this?
var myRef = ???;
a[myRef]; 1 or 2 depending on myRef
Run Code Online (Sandbox Code Playgroud)
如果没有,有什么更好的方式来获得我想要的东西?