C# 如何在asp.net mvc中像匿名对象一样从Jquery datatable传递数据

C# 如何在asp.net mvc中像匿名对象一样从Jquery datatable传递数据,c#,jquery,asp.net,asp.net-mvc,datatables,C#,Jquery,Asp.net,Asp.net Mvc,Datatables,我在ASP.NETMVC视图中有一个Jquery数据表。这些列如下所示: "columns": [ { "data": "Vote", "autoWidth": true }, { "data": "Answer1", "autoWidth": true }, { "data": "View", "autoWidth": true },

我在ASP.NETMVC视图中有一个Jquery数据表。这些列如下所示:

"columns": [
                        { "data": "Vote", "autoWidth": true },
                        { "data": "Answer1", "autoWidth": true },
                        { "data": "View", "autoWidth": true },
                        {
                            "data": "Title", "autoWidth": true,
                            'render': function (Title)
                            {
                                //return '<a href=' + Title + '>' + Title + '</a>';
                                return '<a href=/Questions/GoForAnswer/?idForAnswer='+ 2+'&title=dfg&question=dfg&view=59&date=08%2F10%2F2016%2023%3A39%3A17&answerNumber=13&vote=113>' + Title + '</a>';
                            }
                        }
                ] 
@Html.ActionLink(item.Title, "GoForAnswer", new { idForAnswer = item.ID, title = item.Title, question = item.Question, view = item.View, date = item.Date, answerNumber = item.Answer1, vote = item.Vote })

如何从Jquery函数发送对象

您可以做的是创建一个与对象同名的模型示例:

public class PeopleObject
{
    public string name {get;set;}
    public int age     {get;set;}
}
然后,您只需使用相同的名称创建jquery对象,例如:

var uniqueObjectName = [{name:'example1',age:20},{name:'example2',age:30}];
[HttpGet]
public JsonResult GetModelAction(SampleViewModel model) {
    // Your code here...
}
然后,使用ajax将jquery对象发送给控制器,并将该对象作为ajax的变量示例传递:

var uniqueObjectName = [{name:'example1',age:20},{name:'example2',age:30}];        // #1
    $.ajax({
        type: 'POST',
        data: uniqueObjectName , // #2
        url: '/Home/SubmitMyData',
        //contentType: 'application/json', #3
        //dataType: 'json', #2
        success: alert('Youhou'),
        error: alert('not good')
    });
在控制器中,您可以接收以下对象:

public ActionResult Index(PeopleObject uniqueObjectName )
{
    return View();
}
请注意,控制器参数名和jquery变量名是相同的。。。
控制器将自动将对象映射到模型

您可以做的是创建与对象同名的模型示例:

public class PeopleObject
{
    public string name {get;set;}
    public int age     {get;set;}
}
然后,您只需使用相同的名称创建jquery对象,例如:

var uniqueObjectName = [{name:'example1',age:20},{name:'example2',age:30}];
[HttpGet]
public JsonResult GetModelAction(SampleViewModel model) {
    // Your code here...
}
然后,使用ajax将jquery对象发送给控制器,并将该对象作为ajax的变量示例传递:

var uniqueObjectName = [{name:'example1',age:20},{name:'example2',age:30}];        // #1
    $.ajax({
        type: 'POST',
        data: uniqueObjectName , // #2
        url: '/Home/SubmitMyData',
        //contentType: 'application/json', #3
        //dataType: 'json', #2
        success: alert('Youhou'),
        error: alert('not good')
    });
在控制器中,您可以接收以下对象:

public ActionResult Index(PeopleObject uniqueObjectName )
{
    return View();
}
请注意,控制器参数名和jquery变量名是相同的。。。
控制器将自动将对象映射到模型

更好地以不同的方式构造查询,而不是将
url
直接传递到
$。ajax
,修改它以满足您的需要。 因此,本质上,您将razor生成的URL(来自
@Html.RouteUrl
方法)存储在JavaScript变量中。然后附加查询字符串

因为,在本例中,查询字符串包含动态值,这意味着某些值可能不会在每个请求中列出,您需要将它们列在占位符变量中,并相应地替换值

完成后,只需将查询字符串附加到基本URL,并将其提供给
$.ajax

看一看下面的例子(我已经包括了一个小提琴链接来查看它的实际操作)。我将
@Route.Url
生成的Url存储在
Url
变量中。我还在
keys
表中声明了模型的所有键,并定义了一个
占位符
字符串来相应地替换值

fixPlaceholder
方法中,我只是将所有出现的
{key}=${placeholder}
替换为我的
数据
对象的值(从那里可以得到动态值)或空值(如果没有为该特定属性设置值)

最后,我将
占位符
附加到
url
并将其传递到
$.ajax
。绑定将在
ASP.NET MVC
端发挥其神奇作用,因此不要担心这一点,只需正常声明控制器的操作,需要一个复杂的对象,如本例所示:

var uniqueObjectName = [{name:'example1',age:20},{name:'example2',age:30}];
[HttpGet]
public JsonResult GetModelAction(SampleViewModel model) {
    // Your code here...
}
对于您的客户端代码,您可以有如下内容:

function fixPlaceholder (keys, data, placeholder) {
    for(var i = 0; i < keys.length; i++) {
        placeholder = placeholder.replace(keys[i] + "=${PLACEHOLDER}", keys[i] + "=" + (data[keys[i]] || ""));
    }

    return placeholder;
}

$(function(){
    $("button").on("click", function () {
        var keys = ["Title", "Question", "AnswerNumber", "View", "Date", "Vote"];

        var data = {Title:"Myitle", Question:"MyQuestion", Vote:"10"};

        var placeholder = "?Title=${PLACEHOLDER}&Question=${PLACEHOLDER}&AnswerNumber=${PLACEHOLDER}&View=${PLACEHOLDER}&Date=${PLACEHOLDER}&Vote=${PLACEHOLDER}";

        var url = '@Url.RouteUrl(new{ action="GetModelAsJson", controller="Home"})';

        placeholder = fixPlaceholder(keys, data, placeholder);

        url = url + placeholder;

        $.ajax({
            url: url,
            type: "GET",
            contentType: "application/json; charset=utf-8"
        }).then(function(resp) {
                console.log("Response");
                console.log(resp);
        });
    });

最好以不同的方式构造查询,而不是将
url
直接传递到
$。ajax
,修改它以满足您的需要。 因此,本质上,您将razor生成的URL(来自
@Html.RouteUrl
方法)存储在JavaScript变量中。然后附加查询字符串

因为,在本例中,查询字符串包含动态值,这意味着某些值可能不会在每个请求中列出,您需要将它们列在占位符变量中,并相应地替换值

完成后,只需将查询字符串附加到基本URL,并将其提供给
$.ajax

看一看下面的例子(我已经包括了一个小提琴链接来查看它的实际操作)。我将
@Route.Url
生成的Url存储在
Url
变量中。我还在
keys
表中声明了模型的所有键,并定义了一个
占位符
字符串来相应地替换值

fixPlaceholder
方法中,我只是将所有出现的
{key}=${placeholder}
替换为我的
数据
对象的值(从那里可以得到动态值)或空值(如果没有为该特定属性设置值)

最后,我将
占位符
附加到
url
并将其传递到
$.ajax
。绑定将在
ASP.NET MVC
端发挥其神奇作用,因此不要担心这一点,只需正常声明控制器的操作,需要一个复杂的对象,如本例所示:

var uniqueObjectName = [{name:'example1',age:20},{name:'example2',age:30}];
[HttpGet]
public JsonResult GetModelAction(SampleViewModel model) {
    // Your code here...
}
对于您的客户端代码,您可以有如下内容:

function fixPlaceholder (keys, data, placeholder) {
    for(var i = 0; i < keys.length; i++) {
        placeholder = placeholder.replace(keys[i] + "=${PLACEHOLDER}", keys[i] + "=" + (data[keys[i]] || ""));
    }

    return placeholder;
}

$(function(){
    $("button").on("click", function () {
        var keys = ["Title", "Question", "AnswerNumber", "View", "Date", "Vote"];

        var data = {Title:"Myitle", Question:"MyQuestion", Vote:"10"};

        var placeholder = "?Title=${PLACEHOLDER}&Question=${PLACEHOLDER}&AnswerNumber=${PLACEHOLDER}&View=${PLACEHOLDER}&Date=${PLACEHOLDER}&Vote=${PLACEHOLDER}";

        var url = '@Url.RouteUrl(new{ action="GetModelAsJson", controller="Home"})';

        placeholder = fixPlaceholder(keys, data, placeholder);

        url = url + placeholder;

        $.ajax({
            url: url,
            type: "GET",
            contentType: "application/json; charset=utf-8"
        }).then(function(resp) {
                console.log("Response");
                console.log(resp);
        });
    });

但是,我不知道确切的名称,例如你的解决方案。我不能像这样硬编码。我需要在传递html.actionlink()时传递一个匿名对象新{name where title=title,age where title=title}我可以这样做吗?但是,我不知道确切的名称,例如您的解决方案。我不能像这样硬编码。我需要在传递html.actionlink()时传递一个匿名对象新{name where title=title,age where title=title}我可以这样做吗?谢谢你的代码和信息。var数据在这里包含静态字段。例如:标题:“Myitle”,问题:“MyQuestion”。我需要在这里生成一个查询。比如:标题:“MyTitle”,问题:选择标题=MyTitle的问题。我可以吗?谢谢你的代码和信息。var数据在这里包含静态字段。例如:标题:“Myitle”,问题:“MyQuestion”。我需要在这里生成一个查询。比如:标题:“MyTitle”,问题:选择标题=MyTitle的问题。我可以这样做吗?