DCSIMG
הבדלים בין סוגי ה - Inline Code (= # $) בין<% %> - שלמה גולדברג (הרב דוטנט)

שלמה גולדברג (הרב דוטנט)

מרצה בסלע ויועץ בעולם ה - net.

הבדלים בין סוגי ה - Inline Code (= # $) בין<% %>

אף פעם לא הבנתי מה מסמל כל סוג של קוד inline, כלומר :

1. כתיבת קוד בין הסימנים <% %>

2. כתיבת קוד בין הסימנים <% =%>
 
3. כתיבת קוד בין הסימנים <% #%>
 
4. כתיבת קוד בין הסימנים <% $%>
 
5. כתיבת קוד בין הסימנים <% @%> 
 
 
מצאתי את הפוסט הזה שקיבץ את כל הלינקים להסברים אודות כל סוג.
 
ובקצרה.
 
כשנרצה (מאוד לא מומלץ) לכתוב קוד בתוך ה - aspx נוכל לכתוב בין הסימנים.
 

<form id="form1" runat="server">

<b>

    <% for (int i = 0; i < 6; i++) %></b> <b>

        <% { Response.Write("<br>" + i.ToString()); }%></b>

</form>

 
זהו קוד רגיל שנוכל לכתוב מה שנרצה בין התגים. לקריאה נוספת ב MSDN.
 
 
סימן ה = אומר, שאנחנו רוצים להחזיר איזשהוא ביטוי, לדוגמא.
 
 

Hello <%= name %>!

 

<table>

    <tr>

        <td>

            <%= DateTime.Now.ToLongDateString(); %>

        </td>

    </tr>

</table>

 
הדוגמא הראשונה, בהנחה שיש לנו משתנה בשם name, בדוגמא השנייה אנחנו מחזירים ערך מ - DateTime.
לקריאה נוספת ב - MSDN
 
 
סימן ה - # אומר נשתמש כשנרצה לעשות Binding למאפיין של פקד, נפוץ בעיקר בתוך ItemTemplate של אובייקטים שמקשורים למקור מידע, לדוגמא:
 

<asp:FormView ID="FormView1" DataSourceID="SqlDataSource1" DataKeyNames="ProductID"

    runat="server">

    <ItemTemplate>

        <table>

            <tr>

                <td align="right">

                    <b>Product ID:</b>

                </td>

                <td>

                    <%# Eval("ProductID") %>

                </td>

            </tr>

            <tr>

                <td align="right">

                    <b>Product Name:</b>

                </td>

                <td>

                    <%# Eval("ProductName") %>

                </td>

            </tr>

        </table>

    </ItemTemplate>

</asp:FormView>

 
לקריאה נוספת ב - MSDN
 
 
 סימן ה $ אומר, שאנחנו מכניסים ערך שמוגדר במקום חיצוני, כמו Config או Resource, לדוגמא.

<asp:Literal ID="Literal1" runat="server" text="<%$ AppSettings: copyright %>"/>

 
בהנחה שב - AppSettings יש key בשם copyright.
לקריאה נוספת ב - MSDN (נקודה מעניינת שראיתי שם - ושווה לחקור את זה - שאפשר לייצר הגדרה עצמית עבור צד שמאל של ה - expression, כלומר לכאורה אני יכול לכתוב:
 

<asp:Literal ID="Literal1" runat="server" text="<%$ MyLogic: abcd %>"/>

 
ויתבצע הלוגיקה שלי כדי לקחת את הערך על ידי המפתח abcd ממקום כלשהו)
 
 
סימן ה - @ מגדיר למעשה הנחיות לדף, לרשימת ההנחיות המלאה ב - MSDN
 
וכמובן סימן ה - ! שאומר הערה, לקריאה נוספת ב - MSDN
פורסם: Sep 01 2009, 09:57 PM by Shlomo | with 10 comment(s) |

תוכן התגובה

Guy Burstein כתב/ה:

אחלה פוסט!

גם אני תמיד רציתי לעשות סדר בסימנים.

# September 2, 2009 10:49 AM

DavidBi כתב/ה:

Regrading the <%=Text %> it is syntactic sugar for <%Response.Write(Text)%>

# September 2, 2009 11:07 AM

עמירם כתב/ה:

אני בדיוק נתקל בזה במשהו שאני מפתח והפוסט הזה בא בדיוק בזמן .

אם זה מאוד לא מומלץ להשתמש בזה

איך אני אמור להציג מידע מה DB ללא שימוש ב GRIDVIEW \ LISTVIEW וכ' ?

אני רוצה להציג מידע בצורה פשוטה

נגיד ואני שולף name,phone,age

ואני רוצה להציג בצורה של LABLES כלומר

עבור כל תוצאה אני רוצה להציג את זה בצורה טקסטואלית , ולבצע תנאים על המידע שנשלף

name  רשום במערכת , הפלאפון שלו הוא phone , (אם הוא מעל גיל 20 אז להציג את הגיל שלו, ואם לא אז לא להציג).

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

אך האם יש דרך יותר טובה ויעילה ?

# September 3, 2009 11:18 AM

Shlomo כתב/ה:

ההמלצה להפחית ב - inline code היא של מייקרוסופט כאן:

msdn.microsoft.com/.../ms178135(VS.80).aspx

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

בגדול אתה יכול לעשות את זה בשלושה דרכים.

1. Inline Code

2. Binding של פקדים.

3. יצירת קוד html בצד השרת.

אתה צריך למצוא איך יהיה לך הכי נח לתחזק את הקוד.

# September 3, 2009 11:50 AM

עמירם כתב/ה:

אם אני יוצר קוד HTML בצד השרת

מה הדרך להציג אותו ? (כמובן ללא reponse.write)

# September 3, 2009 12:06 PM

Shlomo כתב/ה:

אתה יכול לעשות את או עם Binding אם עם

<% =%>

עם אתה עושה את זה בצד השרת,

תגדיר את ה - labels שלך

ובקוד תשים לתוכם את הטקטס.

# September 3, 2009 12:26 PM

עמירם כתב/ה:

הרי אני לא יודע כמה labels אמורים להיות לי, כל הקטע כאן שזה דינאמי.

זה אמור להיות דינאמי , וללא תלות בפקד מסוג gridview .

חשבתי שיש משהו יותר נחמד .

זה עובד לי. אבל בצורה מסורבלת.

# September 3, 2009 12:53 PM

Shlomo כתב/ה:

אז תשים טבלה רקילה על העמוד, תגדיר אותה כ - runat=server.

ותוסיף לה שורות בזמן ריצה, תשתמש במלחקות HtmlTableRow ו - HtmlTableCell

# September 3, 2009 1:11 PM

עמירם כתב/ה:

זה מה שחיפשתי!

תודה רבה !!

הנה הקוד

       protected void Button1_Click(object sender, EventArgs e)

       {

           DataTable mydt = GetClients(TextBox1.Text);

           HtmlTableRow tr;

           HtmlTableCell td;

               foreach (DataRow dr in mydt.Rows)

               {

                   tr = new HtmlTableRow();

                   td = new HtmlTableCell();

                   td.InnerHtml = dr["client_name"].ToString();

                   tr.Cells.Add(td);

                   td = new HtmlTableCell();

                   td.InnerHtml = "<a href=mailto:" + dr["id"].ToString() + ">mail to id</a>";

                   tr.Cells.Add(td);

                   myt.Rows.Add(tr);

               }

       }

# September 3, 2009 2:40 PM

Shlomo כתב/ה:

מעולה, שמח לעזור :)

# September 3, 2009 3:02 PM
שלח תגובה

(שדה חובה)  

(שדה חובה)  

(אופציונלי)

(שדה חובה) 

Please add 4 and 4 and type the answer here:


Enter the numbers above: