MVC4模型错误不正确

时间:2013-01-28 23:42:14

标签: asp.net asp.net-mvc asp.net-mvc-3 asp.net-mvc-4 asp.net-mvc-5

嗨,我收到此错误: 传入字典的模型项的类型为'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的新手,请帮助我。

4 个答案:

答案 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())