2013-04-11 1 views
2

У меня возникают проблемы с переменной областью для myClient в моем коде Razor. Я уверен, что решение прост. В основном я ссылаюсь на него в отдельном блоке @{}, который, возможно, вызывает проблему, но кажется, что если я этого не сделаю, я получаю код if..{} в HTML.Что такое область переменных в Razor MVC 3

@{ 
int i = 0; 
foreach (var item in Model.Clients) 
    { 
     Int32 myId = Convert.ToInt32(item.DBID); 
     var myClient = db.Client.Where(c => c.Id == myId).First(); 
    <td> 
     <table class="inner"> 
     <tr><th> 
      @string.Format(
       "{0} {1} {2}", 
       myClient.Title, 
       myClient.Initials, 
       myClient.LastName) 

       @{ 
        if (myClient.Type!="Primary") 
        { 
         @Html.ActionLink(
          "Delete", 
          "Delete", 
          "ClientBackground", 
          new { id=item.ID }, null) 
        } 
       } 
      </th></tr> 
     } 
     <table> 

Мой код не может ссылаться myClient.Type. Если я удалю окружающие @{}, тогда я получу код C# в HTML.

Что-то простое знаю, но я не вижу его.

Любая помощь чрезвычайно ценится.

EDIT: стол закрыт.

+0

, пожалуйста, разместите весь блок кода. где '' и '

' закрыты – webdeveloper

+0

Привет, я не поместил его изначально, так как не думал, что мне это нужно для решения. В любом случае, теперь я вижу EDIT. Еще раз спасибо. – SamJolly

ответ

2

Попробуйте это:

<table class="inner"> 
       @{int i = 0;} 

       @foreach (var item in Model.Clients) 
        { 
         Int32 myId = Convert.ToInt32(item.DBID); 
         var myClient = db.Client.Where(c => c.Id == myId).First(); 


          <tr><td>@string.Format("{0} {1} {2}",myClient.Title,myClient.Initials,myClient.LastName) 
            @if (myClient.Type!="Primary") 
             { 
             @Html.ActionLink("Delete", "Delete","ClientBackground", new { id=item.ID },null) 
           } 

        </td></tr> 
       } 

</table> 

Я сделал много предположений о форматировании. Важно, я поставил ваше назначение int в собственный блок. Я положил открытие и закрытие <tr> и <td>, чтобы установить их и поставить их за пределы опционного @if blocks. Но эта версия будет компилироваться.

+0

Спасибо, это работает. Из интереса какая разница между @ {} и @. Мое подозрение состоит в том, что первые пакеты содержат несколько строк кода. Я предполагаю, что можно получить доступ к переменной из пакета @ {}. Я думаю, что обнаружил, что моя проблема связана с чем-то другим, кроме переменной. – SamJolly

+0

@SamJolly у вас есть правильная идея. одиночные или многострочные. Я думаю, что ваша проблема заключалась в более вложенных скобках и табличных тегах друг над другом. Должна быть четкая иерархия гнездования. –

1

Странный синтаксис здесь:

@{if (myClient.Type!="Primary") 
    { 
      @Html.ActionLink("Delete", "Delete","ClientBackground", new { id=item.ID },null) 
    } 
} 

Почему нет:

@if (myClient.Type!="Primary") 
{ 
    @Html.ActionLink("Delete", "Delete","ClientBackground", new { id=item.ID },null) 
} 

Добавлено:

Обновленное код недействителен HTML разметки, он должен выглядеть примерно так:

<table class="inner"> 
@{ 
int i = 0; 
foreach (var item in Model.Clients) 
{ 
    Int32 myId = Convert.ToInt32(item.DBID); 
    var myClient = db.Client.Where(c => c.Id == myId).First(); 
    <tr><th> 
     @string.Format("{0} {1} {2}", myClient.Title, myClient.Initials, myClient.LastName) 
     @if (myClient.Type!="Primary") 
     { 
      @Html.ActionLink("Delete", "Delete", "ClientBackground", new { id=item.ID }, null) 
     } 
    </th></tr> 
} 
</table> 

Стол не был закрыт, и вы открыли <td> tag

+0

спасибо за ваше предложение. Возможно, «неправильный» не «странный» синтаксис :). См. Мой вопрос ниже о @ {} против @. – SamJolly

Смежные вопросы