В ASP.NET Core RC 1 (полная .NET Framework) у меня работает следующий код:
using System.Collections.Generic;
using System.Linq;
using Microsoft.AspNet.Mvc;
using Microsoft.AspNet.Mvc.Filters;
using Microsoft.AspNet.Mvc.ModelBinding;
using Newtonsoft.Json;
namespace MyProject.Classes.Filters.ModelState
{
public class SetTempDataModelStateAttribute : ActionFilterAttribute
{
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
base.OnActionExecuted(filterContext);
var controller = filterContext.Controller as Controller;
if (controller != null)
{
var modelState = controller.ViewData.ModelState;
if (modelState != null)
{
var dictionary = new KeyValuePair<string, ModelStateEntry>[modelState.Count];
modelState.CopyTo(dictionary, 0);
var listError = dictionary.ToDictionary(m => m.Key, m => m.Value.Errors.Select(s => s.ErrorMessage).FirstOrDefault(s => s != null));
controller.TempData["ModelState"] = JsonConvert.SerializeObject(listError);
}
}
}
}
}
Но в ASP.NET Core 1.0 (полная .NET Framework) возникает ошибка:
using System.Collections.Generic;
using System.Linq;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
using Microsoft.AspNetCore.Mvc.ModelBinding;
using Newtonsoft.Json;
namespace MyProject.Models.ModelState
{
public class SetTempDataModelStateAttribute : ActionFilterAttribute
{
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
base.OnActionExecuted(filterContext);
var controller = filterContext.Controller as Controller;
if (controller != null)
{
var modelState = controller.ViewData.ModelState;
if (modelState != null)
{
var dictionary = new KeyValuePair<string, ModelStateEntry>[modelState.Count];
modelState.CopyTo(dictionary, 0);
modelState = dictionary.[0];
var listError = dictionary.ToDictionary(m => m.Key, m => m.Value.Errors.Select(s => s.ErrorMessage).FirstOrDefault(s => s != null));
controller.TempData["ModelState"] = JsonConvert.SerializeObject(listError);
}
}
}
}
}
«ModelStateDictionary» не содержит определения для «CopyTo», и не удалось найти метод расширения «CopyTo», принимающий первый аргумент типа «ModelStateDictionary» (вам не хватает директивы using или ссылки на сборку?)
Может быть, мне нужно подключить новую ссылку на сборку, которая не нужна в ASP.NET Core RC 1?
System.Web
может устранить ошибку. - person diiN__________   schedule 05.07.2016System.Web
не решило проблему - person Kolya_Net   schedule 05.07.2016asp.net-mvc6
для вопросов, связанных с ASP.NET Core MVC, чтобы избежать путаницы в отношении будущей версии ASP.NET MVC. Также не вставляйте теги в названия вопросов. - person Tseng   schedule 05.07.2016ModelStateDictionary
не реализуетIDictionary<,>
, поэтому на нем нет методаCopyTo
. В вашем случае вы можете заменить свой код наvar listErrorr = modelState.ToDictionary(m => m.Key, m => m.Value.Errors.Select(s => s.ErrorMessage).FirstOrDefault(s => s != null));
, и это должно быть функционально эквивалентно тому, что вы делали во фрагменте. - person Pranav   schedule 06.07.2016