![](/img/trans.png)
[英]Asp.net core 3.1 mvc post request model binding for simple types
[英]asp.net MVC binding specific model results in error for post request
嗨,我在控制器中定义了以下两个操作
[Authorize]
[HttpGet]
public ActionResult Edit()
{
ViewData.Model = HttpContext.User.Identity;
return View();
}
[Authorize]
[HttpPost]
public ActionResult Edit(User model)
{
return View();
}
但是,如果我将编辑后的数据发布到第二个操作,我会收到以下错误:
Server Error in '/' Application.
An item with the same key has already been added.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.ArgumentException: An item with the same key has already been added.
Source Error:
An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.
Stack Trace:
[ArgumentException: An item with the same key has already been added.]
System.ThrowHelper.ThrowArgumentException(ExceptionResource resource) +51
System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add) +7464444
System.Linq.Enumerable.ToDictionary(IEnumerable`1 source, Func`2 keySelector, Func`2 elementSelector, IEqualityComparer`1 comparer) +270
System.Linq.Enumerable.ToDictionary(IEnumerable`1 source, Func`2 keySelector, IEqualityComparer`1 comparer) +102
System.Web.Mvc.ModelBindingContext.get_PropertyMetadata() +157
System.Web.Mvc.DefaultModelBinder.BindProperty(ControllerContext controllerContext, ModelBindingContext bindingContext, PropertyDescriptor propertyDescriptor) +158
System.Web.Mvc.DefaultModelBinder.BindProperties(ControllerContext controllerContext, ModelBindingContext bindingContext) +90
System.Web.Mvc.DefaultModelBinder.BindComplexElementalModel(ControllerContext controllerContext, ModelBindingContext bindingContext, Object model) +50
System.Web.Mvc.DefaultModelBinder.BindComplexModel(ControllerContext controllerContext, ModelBindingContext bindingContext) +1048
System.Web.Mvc.DefaultModelBinder.BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) +280
System.Web.Mvc.ControllerActionInvoker.GetParameterValue(ControllerContext controllerContext, ParameterDescriptor parameterDescriptor) +257
System.Web.Mvc.ControllerActionInvoker.GetParameterValues(ControllerContext controllerContext, ActionDescriptor actionDescriptor) +109
System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) +314
System.Web.Mvc.Controller.ExecuteCore() +105
System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext) +39
System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute(RequestContext requestContext) +7
System.Web.Mvc.<>c__DisplayClass8.<BeginProcessRequest>b__4() +34
System.Web.Mvc.Async.<>c__DisplayClass1.<MakeVoidDelegate>b__0() +21
System.Web.Mvc.Async.<>c__DisplayClass8`1.<BeginSynchronous>b__7(IAsyncResult _) +12
System.Web.Mvc.Async.WrappedAsyncResult`1.End() +59
System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +44
System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) +7
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +8679150
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155
我尝试了几个重命名参数和删除可编辑字段的东西,但似乎模型类型是问题,可能是什么错误?
更新如果我使用绑定属性添加前缀错误消失,但我不知道为什么..因此我的代码将无法工作,因为输入元素不提供前缀
谷歌上有几个相同的问题,但没有一个回答。 我建议检查是否存在具有重复名称的属性:例如,对属性使用“new”覆盖,或者在不同的接口中使用相同的名称等。
另外我认为您可以参考ASP.NET MVC源来查看DefaultModelBinder中到底发生了什么。
我有同样的问题,回到MVC 2中的控制器。问题最终与EntityFramework和BindAttribute(用于验证)有关。
在我的情况下,我有一张名为学生的桌子,有外地国籍。 我正在重构一个旧数据库,并添加了一个新表,其中包含指向Student的链接,以及一个新的INTERNATIONALID字段作为外键。
问题是,我没有重命名原来的国籍领域。 Student实体现在具有与字段(国籍)同名的关联(具有国籍表)。
此外,我一直在使用BindAttribute进行验证,并将国籍字段标记为必需。
我在国际数据库和实体框架中将国籍字段重命名为nationality_old。 这摆脱了错误。 希望这有助于某人。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.