如何使用ajax get或post在带有参数的mvc中将数据从View传递到Controller

时间:2013-04-10 16:40:12

标签: asp.net-mvc jquery parameter-passing viewbag asp.net-mvc-views

我正在尝试使用ajax将数据从View传递到Controller Action Method,如下所示: -

我有一个用户的Membership实例,我从另一个控制器传入这个视图,使用的视图有点像这个ViewBag.MyUser = MyUser;

现在我想使用ajax将'MyUser'传递给另一个Controller表单,如下所示。

 $('#Link').click(function () {      
        $.ajax({
            url: http://localhost/Account/Process,
            type: 'POST',
            data: '@ViewBag.MyUser',
            success: function () {
            },
            error: function () {                
            }
        });

我发布的ActionMethod如下

public ActionResult Process(MembershipUser MyUser)
{
   //Do somethihng with MyUser
}

如果我传递了ajax post,我在BeginExecuteCore(AsyncCallback callback, object state)内部得到错误,声明'没有为此对象定义无参数构造函数。'和控制甚至没有达到我的行动方法。

如果我从Action Method中删除参数(MembershipUser MyUser),它会发布到Action方法,但是

  1. 如果在没有该视图参数的情况下将“MyUser”传递给控制器​​?
  2. 路线有问题吗?如果是的话应该是什么路线?
  3. 或者我应该使用get或post?
  4. 我应该将MyUser转换回MembershipUser?

1 个答案:

答案 0 :(得分:9)

问题是您无法从JQuery传递 MyUser 作为参数,因为JQuery不知道类 MembershipUser 。请记住,JQuery是一种客户端语言, MembershipUser 是在服务器端的C#中定义的。

您可以使用 GET MyUser 对象中所需的属性传递给 Process 操作,如下所示(假设 > MyUser 对象具有 ID a 名称):

$('#Link').click(function () {      
    $.ajax({
        url: http://localhost/Account/Process,
        type: 'GET',
        data: { 
                id: "@ViewBag.MyUser.ID",
                name: "@ViewBag.MyUser.Name" 
              },
        success: function () {
        },
        error: function () {                
        }
    });

行动应该是这样的:

public ActionResult Process(int id, string name)
{
   //Do something
}

我希望它可以帮到你!