传入字典的模型项是 '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);
(我也可能使用异常来处理错误,而不是像这样使用字符串,但那是另一回事。)
我知道这里有很多类似的问题,但是 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);
(我也可能使用异常来处理错误,而不是像这样使用字符串,但那是另一回事。)