传递到字典中的模型项的类型为“System.Int32”,但此字典需要“IMS.Models.Dealer”类型的模型项

时间:2015-07-09 11:01:58

标签: c# asp.net-mvc controller invalidoperationexception

我知道这里有很多类似的问题,但没有一个能解决我的问题。

当我访问网址时:http://localhost:42626/dealer/edit/2

发生错误:

  

传入字典的模型项是“System.Int32”类型,   但是这个字典需要一个'IMS.Models.Dealer'类型的模型项。

DealerController代码:

[HttpGet]
public ActionResult Edit(int DealerId = 0)
{
    //get from database
    Models.Dealer dealer = new Models.Dealer();
    string Error;
    if(dealer.GetDealer(DealerId, out Error))
        return View(dealer);
    else
    {
        RedirectToAction("Index");
    }

    return View(DealerId);
}

[HttpPost]
public ActionResult Edit(Models.Dealer dealer)
{
    //if All validations are true
    if (ModelState.IsValid)
    {
        string Error;
        //save to database
        if(dealer.Save(out Error))
            return RedirectToAction("Index");
        else
        {
            TempData["EditMessage"] = "An error occured. Could not update Dealer. Details: " + Error;
            return Edit(dealer.Id);
        }
    }

    return Edit(dealer.Id);
}

我使用强类型View创建了Models.Dealer,模板为Edit

如果我已定义[HttpGet][HttpPost],为什么不接受int并继续询问Dealer模型?

1 个答案:

答案 0 :(得分:1)

目前,如果找不到经销商ID,您正在调用 RedirectToAction,但忽略结果,然后尝试使用经销商ID返回您的视图。我怀疑你想要:

[HttpGet]
public ActionResult Edit(int dealerId = 0)
{
    //get from database
    Models.Dealer dealer = new Models.Dealer();
    string error;
    if (dealer.GetDealer(dealerId, out error))
    {
        return View(dealer);
    }
    else
    {
        return RedirectToAction("Index");
    }
}

我已经将变量名更新为更惯用,顺便说一下。经销商本身有GetDealer感到奇怪,请注意 - 我希望通过依赖注入向控制器提供某种DealerService,这样你就可以:

Dealer dealer = dealerService.GetDealer(dealerId);

(我也可能使用异常来处理错误,而不是像这样的字符串,但这是另一回事。)