TempData["error-message"]
хранит список строк как Object
.Поэтому вам нужно сначала получить это, привести его к списку строк, пройтись по каждой из них и отобразить его.
Razor в основном вызывает ToString
в выражении (в вашем случае,object
) и, следовательно, вы видите свои текущие результаты
Это должно работать
@if (TempData["error-message"] != null)
{
var errors = TempData["error-message"] as List<string>;
<div class="alert alert-danger alert-dismissable">
<button type="button" class="close" data-dismiss="alert" >x</button>
@foreach(var errorMessage in errors)
{
<p>@errorMessage</p>
}
</div>
}
Хотя это работает, я рекомендую не помещать много кода C # в представление.Если это основной проект asp.net, я бы порекомендовал создать помощник по тегам для этого.Вот очень простой.
[HtmlTargetElement("div", Attributes = "messages")]
public class AlertMessagesTagHelper : TagHelper
{
[ViewContext]
public ViewContext ViewContext { get; set; }
public override void Process(TagHelperContext context, TagHelperOutput output)
{
StringBuilder str = new StringBuilder();
var messages = ViewContext.TempData["error-message"] as List<string>;
if (messages != null && messages.Any())
{
str.Append("<div class='alert alert-danger alert-dismissable'>");
foreach (var message in messages)
{
str.AppendFormat("<div>{0}</div>", message);
}
str.Append("</div>");
}
output.Content.AppendHtml(str.ToString());
}
}
Теперь в вашем файле _ViewImports.cshtml
используйте метод addTagHelper
, чтобы включить всех помощников тегов из вашего проекта
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@addTagHelper *, YourAssemblyName
Теперь в вашем представлении или макете вы можетевызовите этот помощник тега, используя элемент div с атрибутом messages
<div messages></div>
Не стесняйтесь обновлять код помощника тега для отображения разметки HTML, которую вы хотите для сообщений.
ДляОсновные проекты, не относящиеся к ASP.Net, вы можете создать вспомогательный метод HTML, который делает то же самое.