我知道这里有很多类似的问题,但没有一个能解决我的问题。
当我访问网址时: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
模型?
答案 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);
(我也可能使用异常来处理错误,而不是像这样的字符串,但这是另一回事。)