Oto moja sytuacja: Mam UserBadge
obiekt w ASP.NET, zawiera 3 pola, będąc User
przedmiotu, Badge
obiektu i boolean
(isNotified) do sprawdzenia jeśli użytkownik otrzymał powiadomienie o zdobyciu odznaki. Mam problemy z wysyłaniem konkretny UserBadge
z tego WebMethod()
:Pierwsze złożonego obiektu poprzez jQuery/ajax w 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;
}
do mojego $.ajax
:
<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>
a następnie z powrotem do innego WebMethod()
który ustawia isNotified boolean
true gdy zawiadomienie jest zamknięty:
[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();
}
}
}
Problem: Nie mam absolutnie żadnego pojęcia, jak faktycznie przekazać obiekt do ajax, a następnie z powrotem ... Spędziłem około 1,5 dnia przeglądania Internetu na ten temat, ale teraz, postanowiłem przyjść po pomoc. Im więcej o tym czytam, tym bardziej mnie to denerwuje i jestem absolutnym początkującym użytkownikiem jQuery/Ajax/JSON.
Więc jeśli mógłbyś zachować to tak proste, jak to możliwe, i popchnąć mnie we właściwym kierunku, byłoby to najbardziej cenione!
EDIT: Nowa JavaScript poniżej, myślałem, że mam, ale nie.
EDIT2: To jest teraz rozwiązany, skończyło się za pomocą kontrolera zamiast WebMethods
.
Cóż, o to chodziło, myślałem o tym, ale nie jestem pewien, czy mogę odczytać te identyfikatory z dowolnego miejsca na tej stronie. To mój _Layout.cshtml, więc nie mogę przekazać go innym modelom, aby móc uzyskać te identyfikatory. – mktwo
Czy to jest ASP.NET MVC? Wtedy powinieneś być w stanie wykonać Model Binding dla żądań ajaxowych – Shyju
Tak, to jest MVC3, ale z "Bindowanie modelu dla żądań ajaxowych" masz na myśli, że mogę powiązać model NIE z całą stroną, ale tylko z bitami ajax? Ponieważ powiązanie potrzebnego modelu ze stroną nie jest dla mnie użyteczne, ponieważ strona oczekuje "LogOnModel". – mktwo