2011-01-16 53 views
78

Tôi đang cố gắng render một danh sách HTML trông như sau, sử dụng công cụ xem Razor:ASP.NET MVC Razor Concatenation

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

Mã mà tôi đang cố gắng sử dụng để render danh sách này là :

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

Trình phân tích cú pháp bị nghẹn, vì nó cho rằng mọi thứ ở bên phải dấu gạch dưới trong thuộc tính id là văn bản thuần và không được phân tích cú pháp. Tôi không chắc chắn về cách hướng dẫn trình phân tích cú pháp trả về TheItemId.

Tôi không muốn nhưng thuộc tính trên đối tượng mô hình bao gồm tiền tố item_.

Tôi cũng phải giữ cú pháp này vì tôi đang sử dụng danh sách với JQuery Sortable và với hàm serialize yêu cầu thuộc tính id phải được định dạng theo cú pháp này.

Trả lời

158

Bạn nên quấn phần bên trong của cuộc gọi với ():

<li id="[email protected](item.TheItemId)"> 
+3

Tôi bắt đầu với String.Format nhưng thích cú pháp và ngắn gọn của phản hồi của bạn, tôi đánh dấu nó là câu trả lời ưa thích của tôi. –

+1

Chỉ cần đi qua một vài quan điểm một phần từ một đồng nghiệp và làm sạch tất cả các String.Formats với lừa dao cạo nhỏ này. Một +1 kiếm được nhiều nhất! –

+0

Tôi đang sử dụng Visual Studio 2013 và ASP.NET MVC 5, và điều này không hoạt động (chuỗi được đặt * là *, bao gồm '@' và dấu ngoặc đơn) ... Điều cuối cùng làm việc cho tôi chính là không đúng sự thật 'id =" foo "+ Model.Bar'. –

25

Làm thế nào để sử dụng String.Format? như thế này:

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

+0

String.Định dạng đã thực hiện thủ thuật, Cảm ơn! Bạn chỉ thiếu {0} sau item_ trong câu trả lời của bạn. –

+0

Ops .. :) Xin lỗi, đã thay đổi. –

+0

Đây không phải là phân tích cú pháp chính xác, do các dấu ngoặc kép lồng nhau ... nên các dấu ngoặc kép bên trong là dấu nháy đơn và dấu ngoặc kép bên ngoài, giống như 'id =" @ String.Format ('foo {0}', mục .Bar) "'? –

7

tôi thích:

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

Các verbosity nói với các nhà phát triển hỗ trợ là chính xác những gì xảy ra, vì vậy nó rõ ràng và dễ hiểu.

0

Bạn thậm chí có thể sử dụng cách này để concat hơn chuỗi:

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

Here là bài khác.

Hy vọng sẽ giúp ai đó.

Các vấn đề liên quan