我正在一个聊天网站上,并且一段时间以来我一直在收到这个讨厌的错误,真的不知道可能是什么。 我有这个Model类:
public class ChatModel : PageModel
{
public string UserName { get; set; }
public ICollection<string> Espectators { get; set; }
public ICollection<string> Chatters { get; set; }
public string Mediator { get; set; }
public Conversation Conversation{ get; set; }
public Lazy<IConcurrentCaching> _cache { get; set; }
public ChatModel()
{
}
public ChatModel(string connString, string bulkTime, string username, ICollection<string> espectators = null, ICollection<string> chatters = null, string mediator = null, string conversationName = null)
{
//build the class, boring stuff
}
public void OnGet()
{
}
}
此模型是Razor页面的一部分。 这是我的“聊天”视图的控制器:
public class ChatController: Controller
{
public ChatController()
{
}
public IActionResult Chat(ChatModel model)
{
return View(model);
}
}
并调用Controller动作:
public IActionResult CreateChat(string username, string conversationName)
{
if (_cache.Value.Get<List<string>>("ChatList") == null)
{
_cache.Value.Set<List<string>>("ChatList", new List<string>(), 1440);
}
ChatModel model = new ChatModel(_op.Value.ConnectionString, _op.Value.BulkLoadCacheTimeInMinutes, username, conversationName: conversationName);
model.Chatters.Add(username);
return RedirectToAction("Chat","Chat", model);
}
由于某种原因,当我为Chat视图调用controller方法时,它引发以下异常:
InvalidOperationException:无法创建类型的实例 'Microsoft.AspNetCore.Http.HttpContext'。模型绑定的复杂类型 不得为抽象或值类型,并且必须具有无参数 构造函数。或者,将“ HttpContext”属性设置为 'Chatter.UI.Web.Views.Chat.ChatModel'中的非null值 构造函数。 Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ComplexTypeModelBinder.CreateModel(ModelBindingContext bindingContext)
最奇怪的是,我什至没有在ChatModel类上使用HttpContext。我曾尝试使用DI将IHttpContextAccessor注入我的类中(尽管我看不出有什么帮助,但我已经将其视为在线解决方案);它没有用。我也曾尝试在HttpContext的启动时添加一个单例,但无济于事。任何关于正在发生的事情的想法都将不胜感激。
答案 0 :(得分:0)
您不应将PageModel
和Controller
组合在一起。
如错误所示,模型绑定的复杂类型不能为抽象或值类型,并且必须具有无参数构造函数。对于继承ChatModel
的{{1}}是PageModel
类。
创建一个新的单独的类以用于abstract
操作。