2009-11-13 143 views
0

我有一堆主要用于保存数据到后端存储的控制器操作。现在大多数人使用这样的签名:ASP.NET MVC,JSON发布到控制器操作FormCollection参数

// 
    // POST: /WidgetZone/Create 
    [AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult Create(FormCollection collection) 

正如你所看到的,它接受FormCollection。这适用于经典用户视图。现在我想让JSON启用这些操作。而我呢使用JsonPox行为过滤器这个样子:

// 
    // POST: /WidgetZone/Create 
    [JsonPox] 
    [AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult Create(FormCollection collection) 

将这项工作时的动作需要的FormCollection?

例如没有问题(当然我构建JSON对象在我的JavaScript客户端将其传递到这个行动)这项工作:

// 
    // POST: /WidgetZone/Create 
    [JsonPox] 
    [AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult Create(string id, string description) 

这是所有关于回传UI转换成异步的任务一个,所以保存和更新将被完成异步。我在正确的轨道上吗?我认为开发独立的Json,XML或经典的ViewResult操作并不是最好的方法。

帮助理解

回答

1

该过滤器是基于所述操作方法,以便执行以JSON或XML序列化返回模型后运行该所述OnActionExecuted方法。作为行动方法的输入并不重要。一旦动作完成执行,过滤器将查找存储在ViewResult中的模型,并根据请求中传递的Content-Type头将其序列化。

+0

怎么回传反馈?例如,如果没有异常,我想返回“创建成功”,如果出现错误,我想返回“创建失败”。 在控制器内部,我使用ViewData [“Message”] =“Success”执行操作,然后在视图本身中访问ViewData。 如何使用Json返回此文本?我应该添加额外的属性到我的模型类吗?例如,属性LastActionResult WidgetZone类?然后返回创建的对象Json序列化,这个属性也将被包含。 ?? – mare 2009-11-13 15:41:14

+0

是的,你需要添加一个属性到你的模型,因为过滤器只会序列化模型的内容,而不是你在ViewData中的内容。 – 2009-11-13 16:29:52

相关问题