繁体   English   中英

asp.net MVC绑定特定模型导致发布请求的错误

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM