2010-04-27 76 views
3

嗨,我有我的控制器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(); 
    } 

但是定义了以下两个动作,如果我后我editted数据,第二个动作我得到的以下错误:

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 

我试过几件事情像重命名参数和删除可编辑的字段,但似乎型号类型的问题,这可能是错了吗?

更新,如果我使用绑定添加前缀属性错误消失,但我不知道我的why..also代码就无法正常工作,输入要素不提供前缀

+0

用户是您定义的类型吗? – 2010-04-27 20:13:59

+0

是的。但它实现了一些接口,如IPrincipal – TomHastjarjanto 2010-04-27 20:32:38

回答

5

谷歌有几个相同的问题,但没有人回答。我建议检查是否有名称重复的属性:例如,使用“新”覆盖属性,或相同的名称,但在不同的界面等。

另外我想你可以参考ASP.NET MVC资源来查看在DefaultModelBinder中究竟发生了什么。

+0

可能有一些属性是相同接口的一部分,这是否会成为问题? – TomHastjarjanto 2010-04-27 20:51:38

+0

我重构了一个接口,它似乎有一个重复的字段,现在它的工作谢谢 – TomHastjarjanto 2010-04-27 21:02:56

0

我有同样的问题,回到MVC 2中的控制器。这个问题最终与EntityFramework和BindAttribute(用于验证)相关。

就我而言,我有一张名为学生的表格,具有字段国籍。我重构了一个旧的数据库,并添加了一个新的表格国籍和一个新的国籍ID字段作为外键。

问题是,我没有重命名原来的国籍字段。学生实体现在有一个与国籍(国籍)同名的关联(国籍表)。

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

我在数据库和实体框架中将国籍字段更名为nationality_old。这摆脱了错误。希望这可以帮助某人。