asp.net MVC绑定特定模型导致post请求错误

嗨,我在控制器中定义了以下两个操作

[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.b__4() +34 System.Web.Mvc.Async.c__DisplayClass1.b__0() +21 System.Web.Mvc.Async.c__DisplayClass8`1.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(用于validation)有关。

在我的情况下,我有一张名为学生的桌子,具有野外国籍。 我正在重构一个旧数据库,并添加了一个新表,其中包含指向Student的链接,以及一个新的GenderID字段作为外键。

问题是,我没有重命名原来的国籍领域。 Student实体现在具有与字段(国籍)同名的关联(具有国籍表)。

另外,我一直在使用BindAttribute进行validation,并将国籍字段标记为必需。

我在国际数据库和entity framework中将国籍字段重命名为nationality_old。 这摆脱了错误。 希望这有助于某人。