C# Razor Syntax inside a string

2019-06-20 06:29发布

问题:

This is the Code I'm having problems with:

@{int i = 1;}
@foreach (var item in Model)
{
    @:<ul id="sortablei" class='droptrue'>
    i++;
}

How can I use i in the id sortablei? I tried: @i or @{i} but it seems without a space before the i its not working. I couldn't find an answer to my problem in the Razor Syntax Reference so I'm a bit clueless right now.

回答1:

Brackets:

@:<ul id="sortable@(i)" class='droptrue'>

The brackets here scope the razor expression; in many cases they aren't required, however they are necessary when:

  • the expression (on the right) is non-trivial (spaces. etc) and needs help to scope it
  • where without it, it looks like an email address, i.e. abc@def - this has special handling to avoid breaking pages with email addresses in them


回答2:

something like this:

@model System.Generic.Collections.List<MyNameSpace.Product>
@{
    int i = 1;
    string sortablei = "abc",
           droptrue = "abc-cls";
}

<ul id="@sortablei" class="@droptrue">
    @foreach (var item in Model)
    {
       <li>@item.Qty x @item.Name</li>
       i++;
    }
</ul>

Here's a quick reference for your knowledge.


Seams like I didn't got it right,

as Mark said, all you need to do is surround the variable with brackets like

sortable@(i)

I hope the reference is somewhat useful, as your particular problem can be found in Explicit Expression example



标签: c# asp.net razor