แอตทริบิวต์ html ยัติภังค์ด้วย asp.net mvc


111

มีไวยากรณ์ที่ดีกว่าเมื่อสร้างองค์ประกอบที่มีแอตทริบิวต์ยัติภังค์แทนที่จะใช้:

<%= Html.TextBox ("name", value, new Dictionary<string, object> { {"data-foo", "bar"} }) %>

เมื่อดูข้อกำหนด HTML สำหรับมาตรฐานที่เสนอ HTML 5 และWIA ARIAดูเหมือนว่ายัติภังค์ในแอตทริบิวต์ HTML กำลังได้รับการวางแผนให้เป็นเรื่องปกติมากขึ้นเนื่องจากการเว้นวรรคชื่อธรรมดาบางประเภท

เช่น HTML 5 เสนอแอตทริบิวต์ที่กำหนดเองจะมีคำนำหน้าdata-และ WIA ARIA ใช้aria-คำนำหน้าสำหรับแอตทริบิวต์ WIA ARIA ทั้งหมด

เมื่อใช้ตัวช่วย HTML ใน ASP.NET MVC เช่น<%= Html.TextBox("name", value, new { attribute = attributeValue }) %>อ็อบเจ็กต์นิรนามจะถูกแปลงเป็นพจนานุกรม

น่าเสียดายที่ใน C # ไม่มีการรองรับยัติภังค์ในชื่อดังนั้นทางเลือกเดียวคือการสร้างพจนานุกรม ไวยากรณ์ที่ละเอียดมากมีใครเห็นทางเลือกที่ดีกว่าหรือวิธีง่ายๆในการปรับเปลี่ยนฟังก์ชันการทำงานของส่วนขยาย HTML ของ ASP.NET MVC โดยไม่ต้องเขียนส่วนขยายใหม่ทั้งหมดหรือไม่?

คำตอบ:


202

ใช้ขีดล่างในชื่อแอตทริบิวต์ข้อมูลและจะจัดการให้คุณอย่างน่าอัศจรรย์โดยแปลงเป็นยัติภังค์ ทราบดีว่าคุณต้องการยัติภังค์มากกว่าขีดล่างเนื่องจากขีดล่างไม่ถูกต้องในชื่อแอตทริบิวต์ html

<%= Html.TextBox("name", value, new { @data_foo = "bar"}) %>

2
ฉันพบปัญหาที่คล้ายกันในคำถาม SO หลายข้อและนี่คือคำตอบที่ดีที่สุด
user2780436

คุณสามารถเพิ่มเหตุผลสำหรับคำสั่งของคุณขีดที่ไม่ถูกต้องในแอตทริบิวต์ HTML อย่างน้อยสถานะ html 4.01 : ค่าแอตทริบิวต์ต้องประกอบด้วยตัวอักษร (az และ AZ) ตัวเลข (0-9) ขีดกลาง (ทศนิยม ASCII 45) จุด (ทศนิยม ASCII 46) ขีดล่าง (ASCII decimal 95) และโคลอน ( ทศนิยม ASCII 58) ,
surfmuggle

@threeFourOneSixOneThree คำพูดของคุณอ้างถึงค่าแอตทริบิวต์ แต่ในคำถามนี้เราอ้างถึงชื่อแอตทริบิวต์
ED-209

@threeFourOneSixOneThree ฉันเปลี่ยนจุดสิ้นสุดของคำตอบเป็น 'ขีดล่างไม่ถูกต้องในชื่อแอตทริบิวต์ html'
ED-209

19

คำตอบที่ให้ไว้ในActionLink htmlAttributesแนะนำให้ใช้เครื่องหมายขีดล่างแทนขีดกลาง MVC.Net ควรจะปล่อยยัติภังค์แทนขีดล่างเมื่อส่งเพจไปยังเบราว์เซอร์

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.