C# 如何将复杂对象从jquery传递到标记中的动作控制器<;a>;

C# 如何将复杂对象从jquery传递到标记中的动作控制器<;a>;,c#,javascript,jquery,asp.net-mvc-3,controller,C#,Javascript,Jquery,Asp.net Mvc 3,Controller,如何将复杂对象从jquery传递到标记中的动作控制器 我有这样一个jquery代码 function InitCell(row, column, value) { var MyPerson = new Object(); MyPerson.ID = '123456789'; MyPerson.FirstNmae = 'abc'; MyPerson.LastName = 'def'; var html = "<a href='/test/Index

如何将复杂对象从jquery传递到标记中的动作控制器

我有这样一个jquery代码

function InitCell(row, column, value) {

    var MyPerson = new Object();
    MyPerson.ID = '123456789';
    MyPerson.FirstNmae = 'abc';
    MyPerson.LastName = 'def';

    var html = "<a href='/test/Index/person =" + MyPerson +"></a>";
}
public class testController : Controller

{
    //
    // GET: /test/

    public ActionResult Index(Person person)
    {
        return View();
    }

}

class Person
{
    public int ID { get; set; }
    public string LastName { get; set; }
    public string FirstName { get; set; }
    public List<Person> Children { get; set; }
}
函数InitCell(行、列、值){
var MyPerson=新对象();
MyPerson.ID='123456789';
MyPerson.FirstNmae='abc';
MyPerson.LastName='def';
var html=“”;
}
此外,我还有一个像这样的动作控制器

function InitCell(row, column, value) {

    var MyPerson = new Object();
    MyPerson.ID = '123456789';
    MyPerson.FirstNmae = 'abc';
    MyPerson.LastName = 'def';

    var html = "<a href='/test/Index/person =" + MyPerson +"></a>";
}
public class testController : Controller

{
    //
    // GET: /test/

    public ActionResult Index(Person person)
    {
        return View();
    }

}

class Person
{
    public int ID { get; set; }
    public string LastName { get; set; }
    public string FirstName { get; set; }
    public List<Person> Children { get; set; }
}
公共类testController:Controller
{
//
//获取:/test/
公共行动结果指数(人)
{
返回视图();
}
}
班主任
{
公共int ID{get;set;}
公共字符串LastName{get;set;}
公共字符串名{get;set;}
公共列表子项{get;set;}
}

你不能这样做。URI是字符串。如果要在其中传递未格式化为字符串的数据,则必须将其序列化为字符串,然后在另一端反序列化

一般来说,它是一种流行的序列化格式,但请记住,并非所有字符串都是URI安全的,所以在将其包含到URI中之前,您需要先对其进行验证

不过,您只有三条数据,因此您可以:

var html = "<a href='/test/Index/person/" +
           encodeURIComponent( MyPerson.ID ) + "/" +
           encodeURIComponent( MyPerson.FirstName ) + "/" +
           encodeURIComponent( MyPerson.LastName ) + 
           "></a>";
var html=”“;

或者,如果服务器上已经存在数据,只需传递ID值,然后从数据库中获取名称。

查询字符串采用的参数不是您拥有的对象类型,因此您必须将其作为带分隔符&

例如:

var html = "<a href='/test/Index/person?PersonId=123456789&FirtsName=Test......

var html=“您可以做的是发出
httppost
请求,而不是
httpget

$('#postLink').click(function() {
    var MyPerson = {
        ID: 1234,
        FirstName: 'abc',
        LastName: 'def'
    };

    $.ajax({
        data: MyPerson,
        url: $(this).attr('href'),
        type: 'POST',
        dataType: 'json' /* this really is optional */,
        success: function (response) {
            return true;
        },
        error: function ( error ) {
            return false;
        }
    )};

    return false; /* required to stop event propagation */
});
现在,您可以这样定义HTML
元素:

<a href="/test/Index" id="postLink">Ajax post the person to the server.</a>

如何通过调用ajax来包含标记?您可以将整个JavaScript块包装在click事件处理程序中。我将用示例更新上面的JS代码。