Asp.net mvc UpdateModel无法使用模拟表单集合值返回正确的结果

Asp.net mvc UpdateModel无法使用模拟表单集合值返回正确的结果,asp.net-mvc,entity-framework,nunit,updatemodel,Asp.net Mvc,Entity Framework,Nunit,Updatemodel,我有两个调用控制器的测试方法: 这一次通过了: [Test] public void EditAction_Should_Redirect_When_Update_Successful() { // Arrange var controller = CreatePaperControllerAs("SomeUser"); const int id = 2; FormCollection formValues

我有两个调用控制器的测试方法: 这一次通过了:

  [Test]
    public void EditAction_Should_Redirect_When_Update_Successful()
    {

        // Arrange
        var controller = CreatePaperControllerAs("SomeUser");
        const int id = 2;

        FormCollection formValues = new FormCollection() {
            { "IM_Paper.Title", "Another value" },
            { "IM_Paper.Abstract", "Another description" }
        };

        controller.ValueProvider = formValues.ToValueProvider();

        // Act
        var result = controller.Edit(id, formValues) as RedirectToRouteResult;

        // Assert
        Assert.AreEqual("Details", result.RouteValues["Action"]);
        Assert.AreEqual(id, result.RouteValues["id"]);
    }
这个失败了:

 [Test]
    public void EditAction_Should_Redisplay_With_Errors_When_Update_Fails()
    {

        // Arrange
        var controller = CreatePaperControllerAs("SomeUser");
        int id = 1;

        FormCollection formValues = new FormCollection() {
            { "IM_Paper.Year","xxx"}
        };

        controller.ValueProvider = formValues.ToValueProvider();

        // Act
        var result = controller.Edit(id, formValues) as ViewResult;

        // Assert
        Assert.IsNotNull(result, "Expected redisplay of view");
            Assert.IsTrue(result.ViewData.ModelState.IsValid, "Expected Errors");
    }
控制器中的操作结果为

        [HttpPost, Authorize]
    public ActionResult Edit(int id, FormCollection collection)
    {

        IM_Paper paper = _paperRepository.GetPaperById(id);

        if (!paper.IsPostedByUser(User.Identity.Name))
            return View("InvalidOwner");
     try
     {
            UpdateModel(paper, "IM_Paper" );

            _paperRepository.Save();

            return RedirectToAction("Details", new { id = paper.PaperId });
        }
        catch
        {
            return View(paper);
        }
    }
但是,try-catch块从不捕获异常。IM_Paper.Year应该是int。因此控制器总是将操作结果作为RedirectToAction返回。即使是第一次,内存中的数据也没有改变

你知道为什么会这样吗?对于类IM_论文,我使用了POCO生成器并从实体框架生成。该类如下所示:

    public partial class IM_Paper
{
    #region Primitive Properties

    public virtual int PaperId
    {get;set;}

    public virtual string Author
    {get;set;}

    public virtual Nullable<int> Year
    {get;set;
    } ...  

找到答案了,我还没有将属性绑定到IM_Paper类