Đây là tình huống của tôi: Tôi có đối tượng UserBadge
trong ASP.NET, nó chứa 3 trường, là đối tượng User
, đối tượng Badge
và boolean
(isNotified) để kiểm tra nếu người dùng đã được thông báo về việc giành được huy hiệu. Tôi đang gặp vấn đề gửi một cụ UserBadge
từ WebMethod()
này:Nhận đối tượng phức tạp thông qua jQuery/ajax trong ASP.NET
[WebMethod()]
public static UserBadge Notify()
{
var db = new achievDb();
foreach (var uB in db.UserBadges)
{
if (System.Web.HttpContext.Current.User.Identity.Name == uB.User.UserName)
{
if (!uB.isNotified)
{
return uB;
}
}
}
return null;
}
để $.ajax
tôi:
<script type="text/javascript">
$(document).ready(function() {
$.ajax({
type: "POST",
url: "../NotifCodeBehind.aspx/Notify",
data: "{}",
complete: function (result) {
if (result) {
$("#notify").jGrowl("You've unlocked a badge!", { header: 'Yay', close: function() {
$.ajax({
type: "POST",
url: "../NotifCodeBehind.aspx/Notified",
data: "{}",
success: function (ub) { DoCallback(JSON.stringify(ub)); },
error: function() { DoCallback("NOPE!") }
});
}
})
};
function DoCallback(msg) {
alert(msg);
}
}
})
})
</script>
và sau đó trở lại khác WebMethod()
mà đặt isNotified boolean
true khi thông báo đã bị đóng:
[WebMethod()]
public static void Notified(UserBadge ub)
{
var db = new achievDb();
foreach (var userbadge in db.UserBadges)
{
if (userbadge.UserId == ub.UserId && userbadge.BadgeId == ub.UserId)
{
userbadge.isNotified = true;
db.SaveChanges();
}
}
}
Sự cố: Tôi hoàn toàn không có ý tưởng làm thế nào để thực sự vượt qua đối tượng để ajax, và sau đó trở lại một lần nữa ... Tôi đã dành khoảng 1,5 ngày duyệt internet về nó, nhưng bây giờ, tôi đã quyết định đến để được giúp đỡ. Tôi càng đọc nhiều về nó, nó càng làm tôi bối rối, và tôi là một người mới tuyệt đối đối với jQuery/Ajax/JSON.
Vì vậy, nếu bạn có thể giữ nó đơn giản nhất có thể, và di chuyển tôi theo đúng hướng, nó sẽ được đánh giá cao nhất!
CHỈNH SỬA: JavaScript mới bên dưới, tôi nghĩ là đã có, nhưng tôi thì không.
EDIT2: Điều này hiện được giải quyết, tôi đã sử dụng bộ điều khiển thay vì WebMethods
.
Vâng, đó là điều tôi nghĩ về điều đó, nhưng tôi không chắc là tôi có thể đọc những Ids từ bất cứ nơi nào trên trang đó. Đó là _Layout.cshtml của tôi vì vậy tôi không thể chuyển cho nó một mô hình khác để có thể truy cập vào các Id đó. – mktwo
Đây có phải là ASP.NET MVC không? Sau đó, bạn sẽ có thể làm Model Binding cho các yêu cầu ajax – Shyju
Vâng, đây là MVC3, nhưng với 'Mô hình ràng buộc cho các yêu cầu ajax', bạn có nghĩa là tôi có thể liên kết một mô hình KHÔNG với toàn bộ trang, nhưng chỉ với các bit ajax? Bởi vì ràng buộc mô hình cần thiết cho trang không thực sự có thể sử dụng được cho tôi, bởi vì trang mong đợi một 'LogOnModel'. – mktwo