0

UpdateModel を使用して、コントローラーで FormCollection からいくつかの値を割り当てようとしています。コントローラーは次のようになります。

public ActionResult EditValues(int id, FormCollection collection)
{
   NamedClass picture = PictureProvider.GetById(id);
   try
   {
      if(ModelState.IsValid)
        {
            UpdateModel(picture, collection);
        }
   }
   catch {}
}

そして文字列UpdateModel(picture, collection);で、「同じキーを持つ要素が既に追加されている」という ArgumentException を取得しましたが、それ以上のものはありません..「コレクション」には「画像」と同じフィールドがあります.. 「そのような例外が発生する可能性があります..画像のフィールドに手動で値を割り当てようとしました-OK。誰もそのようなトリックを見たことがありますか?前もって感謝します!UPD: StackTrace が役立つかもしれません..

System.ThrowHelper.ThrowArgumentException(ExceptionResource resource)
   System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add)
   System.Linq.Enumerable.ToDictionary[TSource,TKey,TElement](IEnumerable`1 source, Func`2 keySelector, Func`2 elementSelector, IEqualityComparer`1 comparer)
   System.Web.Mvc.ModelBindingContext.get_PropertyMetadata()
   System.Web.Mvc.DefaultModelBinder.BindProperty(ControllerContext controllerContext, ModelBindingContext bindingContext, PropertyDescriptor propertyDescriptor)
   System.Web.Mvc.DefaultModelBinder.BindProperties(ControllerContext controllerContext, ModelBindingContext bindingContext)
   System.Web.Mvc.DefaultModelBinder.BindComplexElementalModel(ControllerContext controllerContext, ModelBindingContext bindingContext, Object model)
   System.Web.Mvc.DefaultModelBinder.BindComplexModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
   System.Web.Mvc.DefaultModelBinder.BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
   System.Web.Mvc.Controller.TryUpdateModel[TModel](TModel model, String prefix, String[] includeProperties, String[] excludeProperties, IValueProvider valueProvider)
   System.Web.Mvc.Controller.UpdateModel[TModel](TModel model, String prefix, String[] includeProperties, String[] excludeProperties, IValueProvider valueProvider)
   System.Web.Mvc.Controller.UpdateModel[TModel](TModel model, IValueProvider valueProvider)

名前付きクラスは次のとおりです。

public class NamedClass
    {
        [Key]
        public virtual int id {get; set;}
        public virtual string username {get; set;}
    }

値を提供するビューは次のとおりです。

@model project.Models.NamedClass
@using (Html.BeginForm("EditValues", "PicController", FormMethod.Post))
{
    @Html.HiddenFor(m=>m.id)
    <div class="display-label">@Html.LabelFor(model=>model.username)</div>
    <div class="display-field">
        @Html.EditorFor(model => model.username)
    </div>
    <input type="submit" value="save" />
}
4

1 に答える 1

0

なんでこんなことしかできないの。

public ActionResult EditValues(NamedClass model)
{
  if(ModelState.IsValid)
  {
     .. save to db
  }

  return View();
}
于 2012-07-18T04:58:03.303 に答える