【发布时间】:2014-12-02 20:18:24
【问题描述】:
您好,我在运行我的应用程序时遇到问题,出现如下错误:
传入字典的模型项的类型为“System.Collections.Generic.List`1[SR.Models.Incydent]”,但此字典需要“SR.Models.Incydent”类型的模型项。
我知道这是因为 in view 可能是对模型的错误参考。 但我的动作看起来像:\
[HttpGet]
public ActionResult ZglosIncydent()
{
return View();
}
[HttpPost]
public ActionResult ZglosIncydent(Incydent incydent)
{
if (ModelState.IsValid)
{
incydent.Id = incydent.generateID();
incydent.DateAdded = DateTime.Now;
incydent.Status = "NO";
incydent.Localization = "{52.1234, 53.1234}";
incydent.Phone = "+48159623478";
dbIncydent.Incydents.Add(incydent);
dbIncydent.SaveChanges();
setFlash("Zgłoszenie Przyjęte", MyController.SUCCESS);
return RedirectToAction("Index", "Index", new { Area = "SR" });
}
return View(incydent);
}
在我看来:
@model SR.Models.Incydent
@{
ViewBag.Title = "Zgłoś Incydent";
Layout = "~/Areas/SR/Views/Shared/_SRLayout.cshtml";
}
@using (Html.BeginForm())
{
@Html.AntiForgeryToken();
@Html.ValidationSummary(true);
<div class="form-group">
<div class="input-group" style="width: 50%;">
<label for="Type">Typ Incydentu</label>
<select class="form-control" id="Type" name="Type" required="required" style="width: 100%">
<option value="WS">Wypadek Samochodowy</option>
<option value="P">Pożar</option>
<option value="Z">Zasłabnięcie</option>
</select>
</div>
</div>
<div class="form-group">
<div class="input-group" style="width: 50%;">
<label for="Description">Opis</label>
<textarea id="Description" class="form-control" name="Description" required="required" style="resize: none;" rows="5"></textarea>
</div>
</div>
<input type="submit" value="Zgłoś Incydent" class="btn btn-default" />
}
当我看到错误时,我认为@model 的行会导致问题,但它的类型正确。在控制器中,我有第二个动作视图,它返回 IENumerable 并且工作正常。
下方视图和索引操作。
public ActionResult Index()
{
return RedirectToAction("Index", "Index", new { Area = "SR" });
}
[HttpGet]
[Authorize(Roles = "Koordynator")]
public ActionResult View(String Type = "", String Status = "", String Order = "")
{
var Incydents = from s in dbIncydent.Incydents select s;
switch (Order)
{
case "id_desc":
Incydents = Incydents.OrderByDescending(s => s.Id);
break;
case "id_asc":
Incydents = Incydents.OrderBy(s => s.Id);
break;
case "date_desc":
Incydents = Incydents.OrderByDescending(s => s.DateAdded);
break;
case "date_asc":
Incydents = Incydents.OrderBy(s => s.DateAdded);
break;
case "type_desc":
Incydents = Incydents.OrderByDescending(s => s.Type);
break;
case "type_asc":
Incydents = Incydents.OrderBy(s => s.Type);
break;
case "status_desc":
Incydents = Incydents.OrderByDescending(s => s.Status);
break;
case "status_asc":
Incydents = Incydents.OrderBy(s => s.Status);
break;
default:
Incydents = Incydents.OrderBy(s => s.DateAdded);
break;
}
if (Type != "all" && Status != "all")
Incydents = Incydents.Where(s => s.Status.Contains(Status) && s.Type.Contains(Type));
else if (Type != "all" && Status == "all")
Incydents = Incydents.Where(s => s.Type.Contains(Type));
else if (Type == "all" && Status != "all")
Incydents = Incydents.Where(s => s.Status.Contains(Status));
return View(Incydents.ToList());
}
【问题讨论】:
-
显示您的
Index方法。 -
1) 确保调用了正确的视图。错误屏幕应指示 Razor 尝试处理的视图 2) 检查布局和视图可能使用的任何部分视图等内容。其中一个可能有一个不被满足的模型。
-
很明显,您正在某个地方将
IEnumerable<Incydent>传递到该视图。从您发布的代码中最明显的是Index()返回的视图是IEnumerable<Incydent>。那是Index.cshtml调用Incydent.cshtl作为部分吗?
标签: c# asp.net-mvc razor