从ASP.NET MVC 3中的视图将强类型对象(不是模型对象)作为参数传递给控制器​​操作方法

时间:2012-02-02 17:01:23

标签: asp.net-mvc asp.net-mvc-3

是否可以在get或post请求中将强类型自定义对象从视图传递到控制器操作方法(而不是用于绑定视图中数据的模型对象)?我有一个视图模型对象,它具有“事件类型”属性,然后很少有其他属性作为事件参数。对于每个帖子或从视图获取请求,我想创建此视图模型对象的实例并传递事件类型(事件类型指示用户作为枚举执行的操作并设置所需的属性)。 对象由模型绑定器创建,但不会填充值。但是如果我传递匿名对象,那么我可以提取值,但我需要为匿名对象中的每个属性声明一个参数,我想避免这种情况。

示例代码:

@Ajax.ActionLink("link1","ActionMethod1", new EventData {EventType="event1",Arg1=@arg1})

@Ajax.ActionLink("link2","ActionMethod1", new EventData {EventType="event2",Arg2=@arg2})

行动方法:

[HttpPost]
public void HandleEvent(EventData eventData)
{
     if (eventData != null)
     {
         //perform action
     }
}

2 个答案:

答案 0 :(得分:0)

如果我正确地阅读了您的问题,您试图通过HTTP GET / POST从浏览器向Controller提交一个强类型对象,并将其反序列化为所需的对象?

这绝对是可能的。在浏览器中,只需序列化为与服务器端类型匹配的JSON对象。

签出表单插件http://jquery.malsup.com/form/,它将为您执行此操作。

答案 1 :(得分:0)

您是否尝试将强类型对象包装在通用对象中?

@Ajax.ActionLink("link1","ActionMethod1", new{eventData = new EventData {EventType="event1",Arg1=@arg1}})

我不确定这是否会给你预期的结果,但我认为值得一试。