2016-02-26 5 views
-3

Одно из моих полей при отображении имен файлов в папке. Мне нужно показать имя файла, но он также показывает расширение.Удаление списка символов из представления в MVC

В настоящее время он показывает, как Theme1.html , но я хочу, чтобы показать тему только я попытался удалить последние символы с помощью

@Html.DisplayFor(modelItem => item.ThemeName.Remove(item.ThemeName.Length-5)) 

но бросает ошибку

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

+0

'@ Html.DisplayFor (modelItem => item.ThemeName.Substring (0, item.ThemeName.LastIndexOf ('.'))' –

+1

Вы должны выполнить манипуляции с строкой, прежде чем вы откроете свойство для своего вида. может добавить модульный тест, чтобы убедиться, что код, удаляющий окончание файла, работает правильно.Для фактического кода манипуляции с строкой см. Ответ anands – andreasnico

+0

@KartikeyaKhosla Спасибо за предложение. Я сделал манипуляцию в контроллере перед передачей списка в представление, и он сработал. – Shahzad

ответ

3

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

templates[i].ThemeName = templates[i].ThemeName.Substring(0, templates[i].ThemeName.Length - 5); 
+0

Почему вы приняли ответ, который вы сделали? - его НЕПРАВИЛЬНО! –

+0

@StephenMuecke Это помогло, Это был не точный ответ, но Я использовал ту же логику в контроллере вместо представления. ** Вот код ** templates [i] .ThemeName = templates [i] .ThemeName.Substring (0, templates [i] .ThemeName.Length - 5); – Shahzad

+0

Хорошо, но не принимайте ответ Акшая - принятый ответ указывает другим, что он работает (и это не так!). И вы должны отредактировать свой ответ, чтобы показать, что сработало для вас и принять его. –

1

Вы пытаетесь удалить int с кодом. Я думаю, что вы пытаетесь использовать:

@Html.DisplayFor(modelItem => item.ThemeName.Remove(item.Substring(item.ThemeName.Length-5))) 

лучший способ сделать это состоит в использовании LastIndexOf:

@Html.DisplayFor(modelItem => item.ThemeName.Substring(0,item.ThemeName.LastIndexOf('.')) 
+0

По-прежнему получить ту же ошибку – Shahzad

1

Вы можете сделать это с помощью split метода

string fileName= "abc.123.txt"; 
    int fileExtPos = fileName.LastIndexOf("."); 
    if (fileExtPos >= 0){ 
    fileName= fileName.Substring(0, fileExtPos); 
    } 

Надежда это Помощь

+0

это не удается, когда у вас есть. 'в имени файла –

+0

Я разделил значение на '..' 'только, как это не удалось – anand

+0

, если ваше имя файла abx.xyz.pfd, какой будет выход из вашего решения? –

1
@Html.DisplayFor(modelItem => item.ThemeName.Substring(0,item.ThemeName.Length-5)) 

Попробуйте Substring вместо Удалить

+0

Он не работает. – Shahzad

+1

Почему же это ответ? lol Действительно ли это помогло? просто для всех остальных. –

+0

@MiquelColl Да, это помогло. Это был не точный ответ, но я использовал ту же логику в контроллере вместо представления. ** Вот код ** templates [i] .ThemeName = templates [i] .ThemeName.Substring (0, templates [i] .ThemeName.Length - 5); – Shahzad

1

Попробуйте это может быть работа для вас

@Html.DisplayFor(modelItem => item.ThemeName.Splite(".")[0]) 
2

Шаблоны могут быть использованы только с доступом поля, доступ к собственности, одномерный индекс массива или одного параметра выражений пользовательских индексатор.

Помощник принимает выражение, а не функцию. Затем он обрабатывает выражение. Как говорится в сообщении, он не может обрабатывать вызовы функций внутри выражений. Вы должны предоставить модель с вычисленными значениями, но не вычислять значение внутри выражения.

Мне нужно показать имя файла, но оно также показывает расширение.

Path.GetFileNameWithoutExtension.

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