我正在尝试将列表和字符串传递给控制器。当我调试时,我可以看到函数很好地获取了所有信息。问题是控制器收到的用户列表是空的。
这是JS功能代码:
$(function () {
$("#datepicker").datepicker({
//defaultDate: "+1w",
changeMonth: true,
changeYear: true,
numberOfMonths: 1,
minDate: "01/01/2008"
});
$("button.action").click(function () {
var date = $('#datepicker').val().toString();
var selected_values = new Array();
$(document).ready(function () {
selected_values = []; // initialize empty array
$(".checked:checked").each(function () {
selected_value.push($(this).val());
});
});
$.ajax('EmployeeDate', {
data: {
lstUserName: selected_values,
strDate: date
},
success: function (data, textStatus, jqXHR) {
$('#DataUser').html(data);
},
error: function () {
console.log("error handler when ajax request fails... ");
},
});
});
});
以下是行动:
public IEnumerable<DateTime> getInfoByDate(string strDate, string lstUserName)
{
CareDB context = new CareDB();
SqlParameter Date = new SqlParameter("@Date", strDate);
SqlParameter userName = new SqlParameter("@EmployeeName", lstUserName);
object[] parameters = new object[] { Date, userName };
IEnumerable<DateTime> lst = context.ReleaseDate.SqlQuery("_UserInformationByDate @Date, @EmployeeName", parameters).ToList();
context.Dispose();
context = null;
return lst;
}
有什么建议吗?谢谢!
修改
$(function () {
$("#datepicker").datepicker({
//defaultDate: "+1w",
changeMonth: true,
changeYear: true,
numberOfMonths: 1,
minDate: "01/01/2008"
});
$("button.action").click(function () {
var date = $('#datepicker').val().toString();
var selected_values = new Array();
$(document).ready(function () {
selected_values = []; // initialize empty array
$(".checked:checked").each(function () {
selected_values.push($(this).val());
});
});
$.ajax({
url: 'EmployeeDate',
datatype: "application/json",
traditional:true,
data: {
lstUserName: selected_values,
strDate: date
},
success: function (data, textStatus, jqXHR) {
$('#DataUser').html(data);
},
error: function () {
console.log("error handler when ajax request fails... ");
},
});
});
});
感谢大家的帮助!
答案 0 :(得分:1)
有两种方法可以将数据发送到MVC控制器:
您需要发送JSON字符串和.ajax()
MIME类型标头。这在data: JSON.stringify({
lstUserName: selected_values,
strDate: date
}),
方法中有两个配置:
contentType: 'application/json'
data
lstUserName=user1&lstUserName=user2&strDate=1/1/2016
配置作为对象,但请记住,jQuery将构造一个查询字符串,每个属性作为键。在您的情况下,traditional
true
配置设置为DateTime strDate, string[] lstUserName
,以便为lstUserName数组生成上述字符串。然后,您可以让控制器接受.val()
。但我会更改名称以从客户端和服务器中删除前缀。
最后一点:我不确定日期选择器上.toString()
的返回数据类型是什么,但是如果它是一个日期,则DateTime.Parse()
是一个糟糕的选择。您应该以{{1}}解析的格式返回一些内容,MVC使用该格式来解析日期值。也许使用.toDateString()
或.toISOString()
。
答案 1 :(得分:0)
您可以使用此方法进行此操作..
var data = { 'user_ids[]' : []};
$(".checked:checked").each(function () {
data['user_ids[]'].push($(this).val());
});
$.ajax('EmployeeDate', {
data: {
lstUserName: data,
strDate: date
},
success: function (data, textStatus, jqXHR) {
$('#DataUser').html(data);
},
error: function () {
console.log("error handler when ajax request fails... ");
},
});
如果您仍然无法做到,请告诉我。
答案 2 :(得分:0)
您正在传递selected_values
这是一个数组,但您的方法参数仅为string
。改为
在后端,您可以更改方法的参数以接收字符串数组。
public IEnumerable<DateTime> getInfoByDate(string strDate, string[] lstUserName)
{
CareDB context = new CareDB();
SqlParameter Date = new SqlParameter("@Date", strDate);
SqlParameter userName = new SqlParameter("@EmployeeName", lstUserName);
object[] parameters = new object[] { Date, userName };
IEnumerable<DateTime> lst = context.ReleaseDate.SqlQuery("_UserInformationByDate @Date, @EmployeeName", parameters).ToList();
context.Dispose();
context = null;
return lst;
}
或前端的 ,您可以更改数据
data: {
lstUserName: selected_values.join(' '),
strDate: date },
编辑:
$.ajax('EmployeeDate', {
data: {
lstUserName: selected_values,
strDate: date
},
dataType: 'json',
success: function (data, textStatus, jqXHR) {
$('#DataUser').html(data);
},
error: function () {
console.log("error handler when ajax request fails... ");
},
});