SPA, MVC4, KNOCKOUT

tamarhp

New member
SPA, MVC4, KNOCKOUT

אני מנסה לבנות אפליקציית ווב בMVC4, על עיקרון SINGLE PAGE APPLICATION (הכל בעמוד אחד בלי לרפרש), ובעזרת KNOCKOUT.JS.
SPA וKNOCKOUT הם חדשים לי ואני מנסה ללמוד אותם.
אני מתבססת על אפליקציית TODO מוכנה ומשנה אותה לצרכים שלי.
עכשיו נתקעתי בבעיה.
נניח שיש לי כמה ישויות באפליקציה, אחת מהן היא PERSON. יש לי PERSON ויש לי PersonViewModel.
אני רוצה לעשות עמוד של כל הפרסונים שיש לי עם אפשרות לשנות את הפרטים שלהם (הכל בלי לרפרש, כזכור).
אני קוראת בAJAX לפונקציה GetPersons שמביאה לי את הפרטים של כל הפרסונים, ומציגה אותם על הדף.
כשהמשתמש מבצע שינוי באחד מהפרטים של הפרסונים בעמוד - מופעלת לי פונקציה ששולחת מידע לקונטרולר כדי לעדכן את הפרסון הרצוי.
הבעיה היא שהפונקציה הקיימת שעליה אני מתבססת - מקבלת רק ID, ואילו הפונקציה החדשה שאני בניתי בקונטרולר צריכה ישות מסוג PersonViewModel.
איך אני יכולה דרך הAJAX לשלוח VIEW MODEL? אין לי בכלל PersonViewModel בדף כי את הפרטים קיבלתי במרוכז דרך GetPersons וכתבתי אותם לדף אחד אחד.

הערה: הMODEL שבראש העמוד הוא מודל אחר שקשור למשהו אחר בעמוד אז אי אפשר להשתמש בזה.
 

MoAtlow

New member
יו, איזה ספגטי

לא הבנתי כלום, אבל תנסי לקרוא על binding
 

tamarhp

New member
בקצרה -

יש לי נתונים בJS, אני רוצה ליצור MODEL של CS, בעזרת JS
ולהעביר אותו בAJAX לקונטרולר
 

tamarhp

New member
אוקיי

הקישור עזר לי - אחת מהתשובות שם סופסוף עזרה לי להגיע לפונקציה בקונטרולר, אבל כרגע הוא שולח לי מודל ריק. בכל אפן אני מאמינה שעברתי את המחסום הקשה ואני רק צריכה לבדוק למה המידע לא טוב :) תודה!
 

tamarhp

New member
אוף, זה לא עזר..

מרגישה שמשהו חסר לי פה. ניסיתי מיליון דברים ותמיד הקונטרולר מקבל NULL.
 

MoAtlow

New member
תראי מה ניסית.

תפרטי: את שולחת Post או Get?
תכתבי כאן אם את יכולה את הRequest, וגם את הModel שלא עובר
 

momoshlomo

New member
נשמע מאד פשוט

בViewModel של Person
יש שדה שנקרא ID
אז כשאת שולחת ajax שאמור לעדכן את פרטי הPerson
פשוט תשלחי עם פמרטר

data:{ID:personViewModel.ID}

בטח לא עזרתי, אבל לפחות ניסיתי
 

tamarhp

New member
?!?

איך זה קשור למה ששאלתי?
אני אחזור בקצרה:
אני צריכה ליצור מודל, ע"י JS.
אריאל נתן קישור שבתוצאה השניה שלו בתשובה השניה יש כביכול פתרון, אבל זה לא עובד לי .
 

tamarhp

New member
אוקיי, גיליתי חצי בעיה!!


ניסיתי לשלוח סתם INT או STRING וגם זה לא עבד אז הבנתי שהבעיה היא בכלל לא לא בVIEWMODEL.
הACTION מוגדר בתור HttpPost וניסיתי לשלוח מידע בתור POST ושום דבר לא עבד - קיבלתי שגיאה 404 שהוא בכלל לא מוצא את המתודה.
ברגע ששיניתי את המתודה לGET ואת אופן השליחה לGET - זה עבד (כרגע ניסיתי עם סתם INT, עוד מעט אני אנסה עם VIEWMODEL)

אולי תוכלו לדעת מה הבעיה?

[AllowAnonymous]
[HttpPost]
public void UpdatePerson(string one)
{
// bla bla
}


$.ajax({
url: "action/Rolls/UpdatePerson",
type: "post",
data: {one:1},
success: function (data, status) {
console.log("It worked!");
},
error: function (err) {
console.log(err);
}
});
 

MoAtlow

New member
תנסי להחליף בjs

באובייקט data את 1 ב "1"
שכן הפרמטר הוא string
 

tamarhp

New member
לא עזר. בכל אופן -

בGET אני מצליחה לשלוח פרמטרים פשוטים כמו STRING אבל אני חוזרת לבעיה המקורית שזה לא מצליח לקבל מודל - המתודה מקבלת NULL..
 
כדאי לעבוד עם פידלר וללמוד לתפוס שגיאות כאלה

פידלר נותן לך הצצה מדויקת למה בדיוק את שולחת ומה חוזר. כל מה שקורה "על הקוים", אחרת, די עובדים על עיוור.
 

tamarhp

New member
תודה,

בזמנו היתה לי התנסות קצרה עם פידלר וזה היה נראה כ"כ מסורבל ויותר מדי מידע שהלכתי לאיבוד.. הסתדרתי רק עם פיירבאג.. אולי ננסה שוב
 

momoshlomo

New member
קדום כל, עד כמה שאני יודע

אי אפשר ליצור מודל בCS מתוך JS. אפשר למלא בdata .
 
למעלה