การต่อมีดโกน ASP.NET MVC


97

ฉันกำลังลองแสดงรายการ HTML ที่มีลักษณะดังต่อไปนี้โดยใช้ Razor view engine:

<ul>
  <li id="item_1">Item 1</li>
  <li id="item_2">Item 2</li>
</ul>

รหัสที่ฉันพยายามใช้เพื่อแสดงรายการนี้คือ:

<ul>
@foreach (var item in Model.TheItems)
{            
  <li id="item_@item.TheItemId">Item @item.TheItemId</li>
}
</ul>

ตัวแยกวิเคราะห์กำลังสำลักเพราะคิดว่าทุกอย่างทางขวาของขีดล่างในแอตทริบิวต์ id เป็นข้อความธรรมดาและไม่ควรแยกวิเคราะห์ ฉันไม่แน่ใจว่าจะสั่งให้ parser แสดงผล TheItemId ได้อย่างไร

ฉันไม่ต้องการ แต่คุณสมบัติบนวัตถุโมเดลที่มีคำนำหน้า item_

ฉันต้องเก็บไวยากรณ์นี้ไว้ด้วยขณะที่ฉันใช้รายการกับ JQuery Sortable และด้วยฟังก์ชัน serialize ที่ต้องใช้แอตทริบิวต์ id เพื่อจัดรูปแบบในไวยากรณ์นี้

คำตอบ:


211

คุณควรห่อส่วนด้านในของการโทรด้วย( ):

<li id="item_@(item.TheItemId)">

3
ฉันเริ่มต้นด้วย String.Format แต่ชอบไวยากรณ์และความกะทัดรัดของคำตอบของคุณฉันกำลังทำเครื่องหมายว่าเป็นคำตอบที่ต้องการ
David Marchelya

ฉันใช้ Visual Studio 2013 และ ASP.NET MVC 5 และนี้ไม่ทำงาน (สตริงมีการตั้งค่าที่เป็นอยู่รวมทั้ง@และวงเล็บ) ... id="foo" + Model.Barสิ่งที่ในที่สุดก็ทำงานให้ฉันเป็นคนไม่งามมาก
Ian Campbell

สิ่งนี้ทำให้ฉันมีตัวแปรในวงเล็บ ดูเหมือนว่าตอนนี้ Razor เข้าใจว่าขีดล่าง + ตัวแปร = สตริง + ตัวแปร
Hugh Seagraves

27

วิธีการเกี่ยวกับการใช้String.Format ? แบบนี้:

<li id="@String.Format("item_{0}", item.TheItemId)">


นี้ไม่ได้มีการแยกวิเคราะห์ได้อย่างถูกต้องเนื่องจากการซ้อนกันราคาสองครั้ง ... ควรคำพูดด้านในจะเป็นคำพูดเดียวและนอกราคาสองครั้งบางอย่างเช่นid="@String.Format('foo{0}', item.Bar)"?
Ian Campbell

10

ฉันชอบ:

<li id="@String.Concat("item_", item.TheItemId)">

การใช้คำฟุ่มเฟือยจะบอกนักพัฒนาฝ่ายสนับสนุนว่าเกิดอะไรขึ้นดังนั้นจึงชัดเจนและเข้าใจง่าย


2

คุณยังสามารถใช้วิธีนี้เพื่อเชื่อมสตริงเพิ่มเติม :

<li id="@("item-"+item.Order + "item_"+item.ShopID)" class="ui-state-default"></li>

นี่คืออีกโพสต์

ความหวังช่วยใครบางคน



0

โพสต์นี้ดูเหมือนจะเก่ากว่า แต่ตอนนี้ใช้งานได้แล้วใน MVC ล่าสุด:

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