ASP.NET MVC Razor Content Заполнители - PullRequest
2 голосов
/ 01 апреля 2012

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

В ASP.NET MVC с механизмом представления Razor: у меня есть представление, которое отображается с одним и тем же оператором if, повторяющимся много раз, в разных частях html. Мне интересно, есть ли способ объединить все эти if в один if и установить значения для заполнителей, которые бы сохранили место, где каждый из этих if есть, вот так:

<div>@ph1</div>
<div>@ph3</div>
<div>@ph2</div>

@if(true)
{
    ph1 = "<div>adfad<div>"
    ph2 = "dsfaadfad"
    ph3 = Model.Value
}

Это какой-то глупый пример, но я думаю, что он понимает, о чем я говорю.

Ответы [ 3 ]

2 голосов
/ 01 апреля 2012

Ваш код в порядке.Вы также можете использовать Razor Helper

http://weblogs.asp.net/scottgu/archive/2011/05/12/asp-net-mvc-3-and-the-helper-syntax-within-razor.aspx

1 голос
/ 02 апреля 2012
@{
    MvcHtmlString ph1 = new MvcHtmlString("");
    MvcHtmlString ph2 = new MvcHtmlString("");
    if (true)
    {
        ph1 = new MvcHtmlString("<div>" + Model.Value + "<div>");
        ph2 = new MvcHtmlString("<div>fsgfdgdfg<div>");
    }
}

@ph1
@ph2

Снова, глупое использование, но это имеет значение.

Как было предложено в одном из ответов, хорошим дополнением к тому, что у меня есть, является назначение помощника. Это облегчает назначение нескольких операторов без большой конкатенации.

@helper helper()
{
    <span>@Model.Value</span>
    <div>dsfadsfasdfdfa</div>
}

@{
    MvcHtmlString ph1 = new MvcHtmlString("");
    MvcHtmlString ph2 = new MvcHtmlString("");
    if (true)
    {
        ph1 = new MvcHtmlString("<div>" + Model.Value + "<div>");
        ph2 = new MvcHtmlString(helper().ToHtmlString());
    }
}

@ph1
@ph2

Если у кого-нибудь есть идеи получше, мне все равно будет интересно.

0 голосов
/ 01 апреля 2012

Представления обычно не должны иметь логику в ваших представлениях (особенно один помощник, который создает HTML).Лучшим вариантом является использование частичных видов или отображения для шаблонов.

модели / [контроллер]

public class SomeViewModel()
{
  //[UIHint("PhoneNumber")]
  //public string ph1 { get; set; }
  //[UIHint("PhoneNumber")]
  //public string ph1 { get; set; }
  //[UIHint("PhoneNumber")]
  //public string ph1 { get; set; }

  //if these all represent phone numbers, it would be ideal to
  [UIHint("PhoneNumbers")]
  IEnumerable<string> PhoneNumbers { get; set; }
}

виды / [контроллеры]

@model SomeViewModel

@Html.DisplayFor(m => m.PhoneNumbers);

просмотр / общий доступ / DisplayTemplates / PhoneNumbers.cshtml

@model IENumerable<string>

@foreach (string phoneNumber in Model)
{
  <div>@phoneNumber</div>
}
...