【发布时间】:2019-03-19 14:09:49
【问题描述】:
我正在尝试使用 AJAX 将字符串(用户单击的 href 的名称)发布到我的 MVC 控制器(然后它将用于根据字符串过滤我的表格结果)。
虽然我已经设法让它在 AJAX 端发布(至少根据警报),但它似乎没有正确到达控制器端,并且在我的快速错误捕获中被视为 null( if 语句)。
请暂时原谅无用的命名约定。我已经尝试了无数方法来尝试解决这个问题,所以当我找到合适的解决方案时会正确命名:)。
我已经为此工作了很长时间,但似乎无法解决这个难题,所以请提供任何帮助!一般来说,我对 AJAX 和 MVC 很陌生,所以我希望这是一个小错误。 :)(仅供参考,我已经尝试过 post 和 get 并且似乎都产生了相同的结果?)
控制器:
[Authorize]
[HttpGet]
public ActionResult GetSafeItems(string yarp)
{
using (CBREntities2 dc = new CBREntities2())
{
if (yarp == null)
{
ViewBag.safeselected = yarp;
}
var safeItem = dc.Items.Where(a => a.Safe_ID == yarp).Select(s => new {
Serial_Number = s.Serial_Number,
Safe_ID = s.Safe_ID,
Date_of_Entry = s.Date_of_Entry,
Title_subject = s.Title_subject,
Document_Type = s.Document_Type,
Sender_of_Originator = s.Sender_of_Originator,
Reference_Number = s.Reference_Number,
Protective_Marking = s.Protective_Marking,
Number_recieved_produced = s.Number_recieved_produced,
copy_number = s.copy_number,
Status = s.Status,
Same_day_Loan = s.Same_day_Loan
}).ToList();
// var safeItems = dc.Items.Where(a => a.Safe_ID).Select(s => new { Safe_ID = s.Safe_ID, Department_ID = s.Department_ID, User_ID = s.User_ID }).ToList();
return Json(new { data = safeItem }, JsonRequestBehavior.AllowGet);
}
}
AJAX 功能(在查看页面上):
$('.tablecontainer').on('click', 'a.safeLink', function (e) {
e.preventDefault();
var yarp = $(this).attr('safesel');
var selectedSafeZZ = JSON.stringify("SEC-1000");
$.ajax({
url: '/Home/GetSafeItems',
data: { 'yarp': JSON.stringify(yarp) },
type: "GET",
success: function (data) {
alert(yarp);
console.log("We WIN " + data)
},
error: function (xhr) {
alert("Boohooo");
}
});
})
** 警报显示正确的类型:“SEC-1000” 但是控制台Log显示:WE WIN [Object object]??
【问题讨论】:
-
试试
console.log("We WIN " + JSON.stringify(data))- 这是一个对象 -
嗨史蒂夫,它返回以下结果:We WIN {"data":[]} ...我猜这表明 DATA 为空但 yarp 没问题??
-
是的,[] 是一个空数组 - 所以没有返回任何内容。如果它是一个数组,你可以做
if(data.length > 0) { ...然后为每个元素做一个。 -
它应该只发布一个字符串“SEC-1000”供我的控制器方法拾取和使用。所以不知道为什么它会以数组的形式出现?
-
一旦你做错了
data: { 'yarp': JSON.stringify(yarp) },- yarp 是一个字符串(不是 JSON 对象)。此外,您还获得了List()的safeItem并将其发回,所以这是正确的 - 它是一个数组。
标签: c# ajax asp.net-mvc