ฉันจะเพิ่ม class class ให้กับองค์ประกอบ HTML ที่สร้างโดยผู้ช่วย HTML ของ MVC ได้อย่างไร


188

ASP.NET MVC สามารถสร้างองค์ประกอบ HTML ใช้ HTML ช่วยยกตัวอย่างเช่น@Html.ActionLink(), @Html.BeginForm()และอื่น ๆ

ฉันรู้ว่าฉันสามารถระบุแอตทริบิวต์แบบฟอร์มโดยการสร้างวัตถุที่ไม่ระบุชื่อและส่งผ่านวัตถุนั้นสำหรับhtmlAttributesพารามิเตอร์(ที่สี่ในกรณีนี้) ที่ระบุidสำหรับองค์ประกอบ:

Html.BeginForm("Foo", "Bar", FormMethod.Post, new { id = "MyForm"})

แต่สิ่งที่เกี่ยวกับclassคุณลักษณะหรือไม่ เห็นได้ชัดว่านี่ไม่ได้ผล:

Html.BeginForm("Foo", "Bar", FormMethod.Post, new { class = "myclass"})

classในฐานะที่เพิ่งโยนข้อผิดพลาดไวยากรณ์สุ่มเมื่อมุมมองของฉันมีการร้องขอเพราะคาดว่าอย่างอื่นหลังจากเผชิญหน้ากับคำหลัก C #

ฉันยังลอง:

new { _class = "myclass"}

และ

new { class_ = "myclass"}

แต่พวกเขายังไม่ได้ทำงานเป็นขีดได้รับการแทนที่ด้วยรอยขีดข่วน

ฉันรู้ว่าฉันสามารถเขียนองค์ประกอบ HTML ด้วยมือหรือห่อแบบฟอร์มไว้ใน a <div class="myClass">แต่ฉันก็ยังสนใจที่จะรู้ว่าควรจะทำอย่างไร

คำตอบ:


348

เพื่อที่จะสร้างชนิดที่ไม่ระบุชื่อ (หรือพิมพ์ใด ๆ ) ที่มีคุณสมบัติที่มีเป็นคำหลักที่สงวนไว้เป็นชื่อใน C # คุณสามารถ prepend ชื่อคุณสมบัติที่มีที่เข้าสู่ระบบ@:

Html.BeginForm("Foo", "Bar", FormMethod.Post, new { @class = "myclass"})

สำหรับ VB.NET ไวยากรณ์นี้จะสำเร็จได้โดยใช้จุด.ซึ่งในภาษานั้นเป็นไวยากรณ์เริ่มต้นสำหรับประเภทไม่ระบุชื่อทั้งหมด :

Html.BeginForm("Foo", "Bar", FormMethod.Post, new with { .class = "myclass" })

เครื่องมือแยกวิเคราะห์ไม่ฉลาดพอ IMO หากต้องการคำใบ้ที่ให้บริบทที่อยู่ในจุดนั้นในรหัส
toddmo

3

แนวปฏิบัติที่เหมาะสมที่สุดในปัจจุบันในการพัฒนา CSS คือการสร้างตัวเลือกทั่วไปที่มีตัวดัดแปลงที่สามารถใช้ได้อย่างกว้างขวางที่สุดทั่วทั้งเว็บไซต์ ฉันจะพยายามหลีกเลี่ยงการกำหนดสไตล์แยกต่างหากสำหรับแต่ละองค์ประกอบของหน้า

หากวัตถุประสงค์ของคลาส CSS ใน<form/>องค์ประกอบคือการควบคุมรูปแบบขององค์ประกอบภายในแบบฟอร์มคุณสามารถเพิ่มแอตทริบิวต์ class <fieldset/>องค์ประกอบที่มีอยู่ซึ่ง encapsulate รูปแบบใด ๆ โดยค่าเริ่มต้นในหน้าเว็บที่สร้างขึ้นโดย ASP.NET MVC คลาส CSS บนแบบฟอร์มไม่ค่อยจำเป็น


4
คุณพูดถูก แต่กรณีนี้แตกต่าง ฉันกำลังมองหาวิธีที่จะระบุข้อมูลเมตาสำหรับปลั๊กอิน jquery สองสามรายการ โดยปกติจะทำโดยใช้แอตทริบิวต์ class ในทางที่ผิด
Adrian Grigore

13
คุณสามารถแนะนำแนวทางปฏิบัติที่ดีที่สุด แต่ถ้าฉันมีแม่แบบที่ใช้ CSS ในแบบฟอร์มฉันจะไม่ไปดูเนื้อแม่แบบเพื่อทำให้ "ถูกต้อง" ความจริงก็คือลูกค้าจะไม่จ่ายเงินมากขึ้นเพราะคุณทำสิ่งที่ถูกต้องโดย css ...
Christian Payne

1
@ChristianPayne พวกเขาอาจถูกบังคับให้จ่ายมากขึ้นในอนาคตเพราะคุณไม่ได้
Ian Warburton

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