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

The model item passed into the dictionary is of type 'System.Int32', but this dictionary requires a model item of type 'IMS.Models.Dealer'

我知道这里有很多类似的问题,但是 none 可以解决我的问题。

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

发生错误:

The model item passed into the dictionary is of type 'System.Int32', but this dictionary requires a model item of type '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);
}

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

如果我已经定义了[HttpGet][HttpPost],为什么它不接受int并继续要求Dealer模型?

目前如果找不到经销商 ID,您正在 呼叫 RedirectToAction,但忽略结果然后尝试 return 您的查看经销商 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);

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