Подтвердить что ты не робот

Условные секции бритвы ASP.NET MVC

Я хочу определить этот раздел, только если какое-либо свойство (Model.ReadOnly) false.

@section toolbar {
    <div class="tool">
        <div class="row">
            @Html.ActionLink( Resources.Strings.Edit, "Edit", "Profile" )
        </div>
        <div class="row">
            @Html.ActionLink( Resources.Strings.Delete, "Delete", "Profile" )
        </div>
    </div >
}

Я попробовал обернуть его в @if ( !Model.ReadOnly ) {}, но он не работает.

Есть ли способ сделать это?


Я не хочу определять пустой раздел (как @itsmatt предлагает), макет моей страницы изменяет, определен ли раздел или нет (с помощью IsSectionDefined( "toolbar" )).

4b9b3361

Ответ 1

Это должно работать.

@if (!Model.ReadOnly)
{
    <text>
    @section toolbar {

    }
    </text>
}

Я никогда не говорил, что это будет красиво; -)

Ответ 2

Это работает для меня:

@section SomeSection {
   @if (!Model.ReadOnly)
   {

   }
}

По существу, переворачивается, где условно. Это по существу приводит к пустой части, если Model.ReadOnly истинно.


Update:

Итак, как перемещать этот раздел в PartialView и делать что-то вроде:

@Html.Partial("MyAction")

в вашем представлении, а затем пусть MyAction вернет вам соответствующий PartialView на основе значения ReadOnly? Что-то вроде:

public PartialViewResult MyAction()
{
   ...

   // determine readonly status - could have passed this to the action I suppose    
   if (ReadOnly)
   {
      return PartialView("TheOneThatDefinesTheSection");
   }
   else
   {
      return PartialView("TheOneThatDoesNotDefineTheSection");
   }
}

Похоже, это будет очень хорошо.

Ответ 3

Бертрана,

См:

Синтаксис условного оператора Razor If/Else

в основном (para-phrasing),... Razor в настоящее время поддерживает подмножество выражений С# без использования @() и, к сожалению, троичные операторы не являются частью этого набора.

Кроме того, это может быть проблемой:

условная логика в представлении mvc vs htmlhelper vs action

в основном, используйте логику if, чтобы вызвать частичное представление, чтобы удовлетворить ваши критерии.

[edit] Это было мое основное мышление (где ваш код @section определен в этом частичном):

@if(!Model.ReadOnly) 
{
    @Html.Partial("toolbar")
}