2013-04-30 2 views
3

Привет У меня есть простой вопрос, я думаю,MVC4 Razor шаблон как

У меня есть cshtml как:

<div id="box"> 
    @if (model.View == "item1") 
    { 
     <div id="item1"> 
      ... 
     </div> 
    } 
    else 
    { 
     <div id="item2"> 
      ... 
     </div> 
    } 
    <div id="itemDescription"> 
     ... 
    </div> 
</div> 

Где я передаю параметр для отображения некоторого содержимого в зависимости от параметра с помощью модели, потому что остальная часть документа в обоих случаях одинакова.

Есть ли еще лучший способ достичь этого?

Спасибо!

+0

Если в каждом из элементов «item1» и «item2» будет слишком много контента, то лучше разместить их на частичных представлениях. Кроме того, вы можете создать html-помощник и позволить ему определять, какой вид отображать и строить/вызывать представление. –

+0

Вы действительно хотите это сделать? Может быть, он работает, но это немного сосать, а добавить что-нибудь было бы очень больно. – nilphilus

+0

Да, я сделал частичный вид для каждого div, это просто простой пример. Если я создаю HtmlHelper, я должен передать ему параметр, я думаю, так будет ли он иметь некоторые преимущества перед решением, которое я принял? – gonzalomelov

ответ

3

Не действительно; это отличный способ сделать что-то. Если ДИВ идентификатор всегда совпадает со значением model.View, вы могли бы сократить его к этому:

<div id="box"> 
    <div id="@(model.View)"> 
     ... 
    </div> 
    <div id="itemDescription"> 
     ... 
    </div> 
</div> 

В противном случае, ваш подход хорошо. Согласно фон комментарий v, вы можете захотеть взглянуть на частичный вид, если содержащаяся разметка многословно (или вам нужно повторить логику в нескольких местах):

http://www.asp.net/mvc/videos/mvc-2/how-do-i/how-do-i-work-with-data-in-aspnet-mvc-partial-views

+0

Спасибо! Единственное, что мне действительно не нравится, это передать параметр строки и сравнить его в представлении. Однако я не могу думать в другом лучшем решении. – gonzalomelov

+0

Это логика представления, поэтому вид - это то место, где оно принадлежит. Это вполне приемлемо и в соответствии с парадигмой MVC делать так. –

4

Ваш подход прекрасен, если не так много в этих двух div. В противном случае создайте два частичных вида, чтобы помочь сохранить порядок вещей:

@if (model.View == "item1") 
{ 
    @Html.RenderPartial("Item1"); 
} 
else 
{ 
    @Html.RenderPartial("Item2"); 
} 
+0

+1 Если участвуют частичные, это примерный пример того, как передавать данные им. Я бы экстраполировал на вопрос, чтобы предположить, что что-то простое, как '@HtmlRenderPartial (model.View)', вероятно, тоже отлично. –

+0

Да, у меня есть некоторые частичные представления. Как я прокомментировал, мне не нравится сравнение строк, чтобы выбрать отображение некоторого вида. Благодаря! – gonzalomelov

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