שלח תשובה

זירת השאלות

1208
צפיות
9
תשובות

שימוש ב HiddenField

,‏ 2 בדצמבר, 2014

שלום
יש לי דיאלוג שבתוכו יש כפתור שאמור לשלוח כמה דברים ל server
הקוד בדף asp :
<div id="theDialog" dir="rtl" class="font14" style="display:none;">
<asp:Button runat="server" CssClass="shlicha" ID="BtnShlicha"/></div>
</div>
בצד הserver אני רוצה לעשות כמה פעולות על נתונים שקיבלתי מצד הקליינט (לדוגמא על תוכן של TextBox מסוים)
הבעיה היא שהוא לא מזהה אותם
הבנתי שבמקרים כאלו מוסיפים HiddenField
איך משתמשים ב HiddenField ? (אני עובדת ב asp ו vb )
אשמח לקבל תשובות
תודה

תגיות:

9 תשובות

  1. Roi Trigerman הגיב:

    דבר ראשון, בקוד שצירפת לא מופיעות תיבות טקסט או כל תוג של קלט מהמשתמש…
    בהנחה שרק שכחת לצרף אותם לשאלה, והם כן קיימות אצלך:

    תיבות הטקטס אמורות להיות מזוהות בצד השרת, כאשר חשוב לשים לב שהן תיבות מסוג:


    <asp:TextBox runat="server" id="txtMyTextBox"/>

    עם דגש על המאפיין runat=server. גם תיבות טקסט רגילות (ללא התחילית asp:) יזוהו בשרת אם יכללו את המאפיין runat=server, אך מומלץ לא לעשות זאת.

    לגבי hidden Field – זהו שדה בלתי נראה שיכול לשמור בתוכו ערך טקסטואלי, בדיוק כמו textbox, ואין משהו מיוחד שהוא יכול לעשות ותיבת טקסט לא יכולה. תחשבי על זה כתיבת טקטס בלתי נראית. משתמשים ב-hiddenfield כשרוצים להעביר משהו לשרת, והוא לא קלט ישיר מהמשתמש (למשל משהו שמתמלא בעזרת javascript בדפדפן).

    אם את רוצה עזרה יותר ספציפית, כדאי לצרף את הקוד היותר מלא…

  2. pninaa הגיב:

    הבעיה היא שבדף יש לי דיאלוג עם כפתור אישור שבלחיצה עליו אני רוצה להעביר את המידע שקיבלתי מהמשתמש לבסיס נתונים.
    בגלל שכל הקוד של השליחה אמור להיות בפונקיית click של הכפתור (שנמצא בתוך הדיאלוג) הוא לא מכיר את התוכן של האלמנטים. (כל הבעיה זה בגלל הדיאלוג)
    לדוגמא בדף asp יש לי checkbox. ובקוד מאחורה הוא לא מזהה אם הוא בחור או לא
    (הערה- כל האלמנטים לא נמצאים בתוך הדיאלוג)
    לכן רציתי להשתמש ב hiddenfield .

  3. Roi Trigerman הגיב:

    vto הכוונה היא לעמוד ראשי עם תיבות קלט מהמשתמש, וכפתור שפותח חלון חדש שעליו כפתור אישור? אם כן, אז אכן אפשר להעביר את המידע לחלון החדש, ולשמור אותו ב-hidden fields.
    השאלה היא האם המידע אמור להשתנות ב"דיאלוג" הזה, או שהוא פשוט מועבר כמו שהוא? אם הוא מועבר כמו שהוא, ובעמוד החדש יש רק כפתור אישור, אז אפשר כבר בלחיצה על הכפתור שפותח את הדיאלוג לשמור את המידע בשרת (ב-session למשל) ואז לא צריך להחזיר את המידע שוב לדיאלוג. זה יחסוך העברה הלוך ושוב של מידע בין השרת למשתמש, כאשר המשתמש לא זקוק לו להמשך התהליך בכל מקרה (הוא ישאר שמור בשרת להמשך).

    הכנסת ערך ל-hidden fields בצד השרת היא פשוטה מאוד:
    נניח שיש לך hiddden fileds עם id=hfMyField. הקוד להכנסת ערך לתוכו יהיה:


    hfMyFields.Value = "some text here";

  4. pninaa הגיב:

    המידע בדיאלוג לא משתנה.
    כדאי לעשות את זה עם session או עם hidden fields?
    אם אפשר דוגמא לשמירת מידע ב session
    תודה על העזרה!!!

  5. Roi Trigerman הגיב:

    אוקי אז ה-Session מאפשר לשמור אובייקטים למשך זמן מסויים, ועבור כל גולש באתר יש session משלו

    הערכים נשמרים ב-session כאובייקט מסוג object, ולפי "מפתח" מסויים. בעזרת אותו מפתח ניתן לאחר מכן לשלוף את האובייקט, לבצע המרה לסוג (טיפוס נתונים) הרצוי (זה שאותו אובייקט היה לפני השמירה ב-session), ולהמשיך להשתמש בו כרגיל.

    לדוגמה, אני רוצה לשמור משתנה מסוג int שערכו 3 ב-Session, תחת השם "age":


    int num = 3;
    Session["age"] = num;

    צורה אחרת שעושה פעולה זהה:


    Session.Add("age", num);

    אחר כך, כדי להוציא את המידע מה-session, למשל בעמוד אחר באתר:


    int age = (int)Session("age");

    כאשר מומלץ לבדוק קודם כל ששמור שם משהו לפני שמנסים לעשות המרה.

  6. pninaa הגיב:

    שלום
    הבנתי שהבעיה לא הייתה בגלל הדאילוג
    עוד לא הצלחתי לפתור אותה. צירפתי קוד:
    קוד צד לקוח ב asp –
    <asp:CheckBox ID="chk1" runat="server" Text="1" CssClass="font14" />
    asp:CheckBox ID="chk1" runat="server" Text="2" CssClass="font14" /> וכו’

    קוד צד שרת:(vb)

    Private Sub btnshmira_Click(sender As Object, e As System.EventArgs) Handles btnshmira.Click
    Dim arr As New StringBuilder
    Dim i As Int16
    For index = 1 To 10
    Dim checkBox As CheckBox = Master.FindControl("ContentUsersPage").FindControl("chk" + (index).ToString)
    If (checkBox.Checked) Then
    arr(i) = checkBox.Text
    i += 1
    End If
    Next
    End Sub

    בקוד הזה אני עוברת על רשימה של checkboxes ומעבירה למערך את כל הטקסטים של הcheckboxes שנבחרו
    הבעיה היא שהוא מזהה את האלמנטים אבל לא את השינויים שנעשו עליהם(ע"י המשתמש – בזמן ריצה) בלולאה הוא מסמן את כולם כלא -מסומנים .
    וגם באלמנטים אחרים – לדוגמא אני רוצה לבדוק מהו תוכן של textbox מסוים והוא מראה שהוא ריק
    מה יכול להיות הבעיה??

  7. Roi Trigerman הגיב:

    אוקי, אז אני לא בקיא ב-visual basic, יכול להיות שה-viewstate כבוי אצלך, ואז הוא לא שומר בכלל את המצב של הפקדים בעמוד… זו אפשרות אחת שחשבתי עליה.

    חוץ מזה, לפחות בקוד שהעתקת להודעה, יש לך שני צ’קבוקסים עם אותו id, שזה כמובן יגרור בעיות אם זה באמת ככה אצלך בקוד…

    לגבי viewstate: זה המקום שבו כל המידע שהמשתמש מכניס ל-inputs נשמר (בצורה מוצפנת, על גבי העמוד עצמו), ומועבר לשרת על מנת שלאחר postback יהיה אפשרי למלא מחדש את המידע בתיבות, ולא לאפס את הכל למצב ההתחלתי. זה דרך בעצם לשמור על המצב (state) ולהתמודד עם העובדה שדפי אינטרנט הם חסרי מצב (stateless).

  8. pninaa הגיב:

    הצלחתי לפתור את הבעיה –
    האלמנטים היו במצב של disabled לכן בserver לא הצלחתי לקבל את הערך
    תודה על העזרה

  9. Roi Trigerman הגיב:

    ובלי קשר לנושא, אני חייב להמליץ לך לעבור ל-C#. את עדיין בתחילת הדרך בתכנות ולכן המעבר יהיה כמעט בלתי מורגש.

    שפת C# הרבה יותר פופולרית היום, ויש לה הרבה יותר דרישה בשוק מאשר ל-VB.

שלח תשובה