โปรดทราบว่าคุณสามารถทำสิ่งนี้ได้ (อย่างน้อยใน MVC3):
<td align="left" @(isOddRow ? "class=TopBorder" : "style=border:0px") >
สิ่งที่ฉันเชื่อคือการเพิ่มเครื่องหมายคำพูดคือเบราว์เซอร์จริงๆ ดังที่ Rism ชี้ให้เห็นเมื่อทดสอบกับ MVC 4 (ฉันยังไม่ได้ทดสอบกับ MVC 3 แต่ฉันคิดว่าพฤติกรรมไม่เปลี่ยนแปลง) สิ่งนี้เกิดขึ้นจริงclass=TopBorder
แต่เบราว์เซอร์สามารถแยกวิเคราะห์ได้ดี parsers HTML จะค่อนข้างให้อภัยในคำพูดที่ขาดหายไปแอตทริบิวต์ แต่นี้สามารถทำลายถ้าคุณมีช่องว่างหรือตัวอักษรบางอย่าง
<td align="left" class="TopBorder" >
หรือ
<td align="left" style="border:0px" >
เกิดอะไรขึ้นกับการเสนอราคาของคุณเอง
หากคุณพยายามใช้รูปแบบ C # ทั่วไปสำหรับคำพูดที่ซ้อนกันคุณจะได้ราคามากกว่าที่คุณต่อรองเพราะ Razor พยายามที่จะหลบหนีอย่างปลอดภัย ตัวอย่างเช่น:
<button type="button" @(true ? "style=\"border:0px\"" : string.Empty)>
สิ่งนี้ควรประเมิน<button type="button" style="border:0px">
แต่ Razor หลบหนีเอาต์พุตทั้งหมดจาก C # และทำให้เกิด:
style="border:0px"
คุณจะเห็นสิ่งนี้ก็ต่อเมื่อคุณดูการตอบกลับผ่านเครือข่าย หากคุณใช้ตัวตรวจสอบ HTML คุณมักจะเห็น DOM ไม่ใช่ HTML ดิบ เบราว์เซอร์แยกวิเคราะห์ HTML ลงใน DOM และการแสดง DOM หลังการแยกวิเคราะห์ก็มีการใช้เฉพาะบางอย่างแล้ว ในกรณีนี้เบราว์เซอร์จะเห็นว่าไม่มีเครื่องหมายคำพูดรอบค่าแอตทริบิวต์ให้เพิ่ม:
style=""border:0px""
แต่ในโค้ดอักขระ HTML ของตัวตรวจสอบ DOM จะแสดงอย่างถูกต้องดังนั้นคุณจึงเห็น:
style=""border:0px""
ใน Chrome หากคุณคลิกขวาและเลือกแก้ไข HTML ระบบจะเปลี่ยนกลับเพื่อให้คุณเห็นรหัสอักขระ HTML ที่น่ารังเกียจเหล่านั้นทำให้ชัดเจนว่าคุณมีเครื่องหมายคำพูดภายนอกจริงและเครื่องหมายคำพูดภายในที่เข้ารหัส HTML
ดังนั้นปัญหาในการพยายามยกคำพูดด้วยตัวเองคือ Razor หนีสิ่งเหล่านี้
หากคุณต้องการควบคุมคำพูดที่สมบูรณ์
ใช้ Html.Raw เพื่อป้องกันการหลุดของใบเสนอราคา:
<td @Html.Raw( someBoolean ? "rel='tooltip' data-container='.drillDown a'" : "" )>
แสดงผลเป็น:
<td rel='tooltip' title='Drilldown' data-container='.drillDown a'>
ข้างต้นปลอดภัยอย่างสมบูรณ์เพราะฉันไม่ได้ส่งออก HTML ใด ๆ จากตัวแปร ตัวแปรเดียวที่เกี่ยวข้องคือเงื่อนไขที่สาม อย่างไรก็ตามโปรดระวังว่าเทคนิคสุดท้ายนี้อาจทำให้คุณพบปัญหาด้านความปลอดภัยหากสร้างสตริงจากข้อมูลที่ผู้ใช้ให้มา เช่นหากคุณสร้างแอตทริบิวต์จากช่องข้อมูลที่มาจากข้อมูลที่ผู้ใช้ให้มาการใช้ Html.Raw หมายความว่าสตริงอาจมีการสิ้นสุดก่อนกำหนดของแอตทริบิวต์และแท็กจากนั้นเริ่มแท็กสคริปต์ที่ทำอะไรบางอย่างในนามของผู้ที่ล็อกอินอยู่ ผู้ใช้ (อาจแตกต่างจากผู้ใช้ที่เข้าสู่ระบบ) บางทีคุณอาจมีหน้าที่มีรายชื่อรูปภาพของผู้ใช้ทั้งหมดและคุณกำลังตั้งคำแนะนำเครื่องมือให้เป็นชื่อผู้ใช้ของแต่ละคนและผู้ใช้หนึ่งคนตั้งชื่อตัวเองว่า'/><script>$.post('changepassword.php?password=123')</script>
และตอนนี้ผู้ใช้รายอื่นที่ดูหน้านี้ได้เปลี่ยนรหัสผ่านเป็นรหัสผ่านที่ผู้ใช้ประสงค์ร้ายทราบทันที