C# 如何在asp.net mvc中像匿名对象一样从Jquery datatable传递数据
我在ASP.NETMVC视图中有一个Jquery数据表。这些列如下所示: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 },
"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的问题。我可以这样做吗?