// LOG:
// 2022-10-24 09:37:29.0909|Error|ServiceMenu.Q255: The value '' is invalid.
// 2022-10-24 09:37:35.4096|Error|ServiceMenu.Q265: The value '' is invalid.
if (!ModelState.IsValid)
{
foreach (var k in ModelState.Keys)
{
var v = ModelState[k];
if (v.Errors.Count > 0)
{
string s = k + ": ";
for (int i=0; i < v.Errors.Count - 1; i++)
s += v.Errors[i].ErrorMessage + ", ";
s += v.Errors[v.Errors.Count - 1].ErrorMessage;
_logger.LogError(s);
}
}
return Page();
}
Пример вывода (два обязательных поля, Q255 и 265, были пустыми):
[b]Справочная информация:[/b] [list] [*]У меня есть приложение ASP.NET Core. Я пытаюсь записать в журнал ошибки проверки на стороне сервера. [*]Если проверка модели ASP.NET Core обнаруживает какую-либо ошибку в любом поле веб-формы, то ModelState.IsValid является ложным. [*]Каждое поле веб-формы указано в ModelState.Values. [*]Если «Значение» содержит одну или несколько ошибок, то значение .Errors.Count > 0 [*]Я хочу регистрировать а) имя поля веб-формы («ключ» значения) и б) каждое сообщение об ошибке для этого поля. [*]Я хотел бы включить всю эту информацию в одну строку (т. е. в одну «строку» C#). [/list] [b] Текущий код:[/b] [code]// LOG: // 2022-10-24 09:37:29.0909|Error|ServiceMenu.Q255: The value '' is invalid. // 2022-10-24 09:37:35.4096|Error|ServiceMenu.Q265: The value '' is invalid. if (!ModelState.IsValid) { foreach (var k in ModelState.Keys) { var v = ModelState[k]; if (v.Errors.Count > 0) { string s = k + ": "; for (int i=0; i < v.Errors.Count - 1; i++) s += v.Errors[i].ErrorMessage + ", "; s += v.Errors[v.Errors.Count - 1].ErrorMessage; _logger.LogError(s); } } return Page(); } [/code] [b]Пример вывода (два обязательных поля, Q255 и 265, были пустыми):[/b] [code]2022-10-24 09:37:29.0909|Error|ServiceMenu.Q255: The value '' is invalid. 2022-10-24 09:37:35.4096|Error|ServiceMenu.Q265: The value '' is invalid. [/code] Можно ли упростить этот вложенный цикл с помощью LINQ?