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

use*_*861 4 asp.net-mvc jquery parameter-passing asp.net-mvc-views viewbag

我试图使用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 () {                
            }
        });
Run Code Online (Sandbox Code Playgroud)

我发布的ActionMethod如下

public ActionResult Process(MembershipUser MyUser)
{
   //Do somethihng with MyUser
}
Run Code Online (Sandbox Code Playgroud)

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

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

  1. 如何在没有参数的情况下将"MyUser"传递给控制器​​?
  2. 路线有问题吗?如果是的话应该是什么路线?
  3. 或者我应该使用获取或发布?
  4. 我应该将MyUser转换回MembershipUser?

小智 9

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

您可以使用GET将所需的属性从MyUser对象传递给Process操作,如下所示(假设MyUser对象具有,IDName):

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

动作应该是这样的:

public ActionResult Process(int id, string name)
{
   //Do something
}
Run Code Online (Sandbox Code Playgroud)

我希望它对你有所帮助!