(Razor) Длина строки в Html.Helper? - PullRequest
2 голосов
/ 02 сентября 2011

Это очень простой вопрос.

У меня есть Html.helper:

@Html.DisplayFor(modelItem => item.Text)

Как вырезать строку из item.Text до определенной длины?Я хотел бы, чтобы вы могли сделать SubString или что-то прямо для элемента.в виде индекса и т. д.

Ответы [ 5 ]

4 голосов
/ 02 сентября 2011

Есть 3 варианта, которые можно рассмотреть:

  1. Обрезать текст в слое сопоставления перед отправкой его в представление (при преобразовании модели вашего домена в модель представления)
  2. Написать собственный HTML-помощник
  3. Написать собственный шаблон отображения для данного типа, а затем 3 возможности указать правильный шаблон отображения: 1) полагаться на условные обозначения (в этом случае ничего не делать, шаблон будет выбран автоматически) 2) украсить свойство модели представления с атрибутом UIHint 3) передать имя шаблона в качестве второго аргумента помощнику DisplayFor.
3 голосов
/ 04 апреля 2013

Мне нужно было то же самое, и я решил проблему с помощью следующих строк:

<td>
    @{
        string Explanation = item.Explanation;
        if (Explanation.Length > 10) 
        {  
            Explanation = Explanation.Substring(0, 10);
        }
    }
@Explanation
</td>

Если ваша строка всегда больше 10, вы можете исключить:

if (Explanation.Length > 10) 
{
    Explanation = Explanation.Substring(0, 10);
}

ИНапишите прямо:

string Explanation = item.Explanation.Substring(0, 10);

Также я рекомендую добавить .. для строк, превышающих установленный вами предел.

2 голосов
/ 12 июня 2013

Изменение

@Html.DisplayFor(modelItem => item.Text) 

до

@Html.Display(item.Text.Length > 10 ? item.Text.Substring(0,10) : item.Text)
2 голосов
/ 02 сентября 2011

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

// View model
public string TextShort { get { return Text.Substring(0, 10); } }

// View
@Html.DisplayFor(modelItem => item.TextShort)
0 голосов
/ 02 сентября 2011

Отредактировано: новый ответ

как насчет

@{
 modelItem.ShortText= model.Text.Substring(0, ....);
}

@Html.DisplayFor(modelItem => item.ShortText)

Прототип для DisplayFor:

public static MvcHtmlString DisplayFor<TModel, TValue>(
    this HtmlHelper<TModel> html,
    Expression<Func<TModel, TValue>> expression
)

И модель элемента, я думаю, является динамической, поэтому должна быть возможность добавить новое свойство в модель представления.

...