如何在不更改传入模型的情况下向控制器操作添加额外参数

时间:2012-03-16 13:46:00

标签: asp.net-mvc

假设我有一个通过AJAX发布的默认模型:

var data = {
 // some members...

 newMember: true
}

$.post("/mycontroller/action", data, function() {});

在我的控制器中,我不想污染进入控制器的现有模型。我希望能够将newMember参数添加到操作中。

[HttpPost]
public ActionResult AddMember(MemberModel model, bool newMember)
{

}

我想让模型绑定器填充newMember,而不是更改MemberModel,但这不起作用。我如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

  

而不是更改MemberModel

这正是视图模型的用途。控制器操作必须将视图模型作为参数接收,并将视图模型传递给视图。

但无论如何,如果由于某种原因你不在你的应用程序中使用视图模型,你可以发送一个JSON请求:

$.ajax({
    url: '/mycontroller/action',
    type: 'POST',
    contentType: 'application/json',
    data: JSON.stringify({
        newMember: true,
        model: {
            foo: 'bar'
        }
    }),
    success: function(result) {

    }
});

请记住,这适用于ASP.NET MVC 3.如果您使用的是旧版本,则可以按照this blog post中的说明编写自定义JsonValueProvider工厂。