嗨,我收到此错误: 传入字典的模型项的类型为'System.Collections.Generic.List`1 [DBModel.Telemarketing]',但此字典需要类型为'TWeb.Models.LoginModel'的模型项
在_Layout.cshtml文件中我有
@Html.Partial("_LoginPartial")
这个部分登录视图在_layout页面上的div中呈现(它用javaScripts隐藏/显示)
@model TWeb.Models.LoginModel
然后我有“Telemarketings”控制器有视图:
public class TelemarketingController : Controller
{
private Entities db = new Entities();
//
// GET: /Telemarketing/
public ActionResult Index()
{
return View(db.Telemarketings.ToList());
}
点击_Layout页面中的链接
@Html.ActionLink("Telemarketingas", "Index", "Telemarketing", new{area="" },new{ })
它会抛出一个写在帖子顶部的错误。
我是MVC的新手,请帮助我。
答案 0 :(得分:2)
您的“_LoginPartial”需要“LoginModel”模型,但由于您没有提供任何模型,Razor引擎会将其模型设置为当前视图模型(“db.Telemarketings.ToList()”)。
你所要做的就是设置它的模型,可能是这样的:
@Html.Partial("_LoginPartial", new LoginModel())
答案 1 :(得分:2)
问题1)您的Partial需要一个模型,而您没有传递一个模型。
正确的语法:@Html.Partial("_LoginPartial", Model.LoginModel)
问题2) _layout,据我所知,不能传递模型
解决方案1: 使用ActionPartial。 AcionPartials类似地被称为
@Html.Action("/Tools/_LoginPartial").
区别在于它们有一个ActionMethod Associated,可以返回Model
public ActionResult _LoginPartial()
{
LoginModel Model= new LoginModel();
//populate Model from whatever
return View(Model);
}
选项2: 将LoginModel对象传递给Viewbag
Viewbag.LoginModel = new LoginModel();
并引用_layout的Partial
中的Viewbag@Html.Partial("_LoginPartial", Viewbag.LoginModel)
答案 2 :(得分:0)
最简单的方法是从Login Div删除模型声明:)。
答案 3 :(得分:0)
您可以使用此代码
@Html.Partial("Partial page", new ModelFroLogin())