4

我正在尝试使用 ajax 将数据从视图传递到控制器操作方法,如下所示:-

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

现在我想使用 ajax 将“MyUser”传递给另一个控制器,如下所示。

 $('#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
}

如果我通过 do ajax post,我会在内部收到错误 BeginExecuteCore(AsyncCallback callback, object state)声明“没有为此对象定义无参数构造函数”。我的行动方法甚至没有控制权。

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

  1. 在这种情况下,我怎样才能将“MyUser”从该视图传递给控制器​​而没有参数?
  2. 路线有问题吗?如果是的话应该是什么路线?
  3. 还是我应该使用 get 或 post ?
  4. 我应该在哪里将 MyUser 转换回 MembershipUser ?
4

1 回答 1

9

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

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

$('#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
}

我希望它对你有帮助!

于 2013-04-10T18:08:11.720 回答