1

您好我收到此错误: 传入字典的模型项的类型为“System.Collections.Generic.List`1[DBModel.Telemarketing]”,但该字典需要“TWeb.Models.LoginModel”类型的模型项

在 _Layout.cshtml 文件中我有

@Html.Partial("_LoginPartial") 

此部分登录视图在 _layout 页面上的 div 中呈现(它使用 javaScripts 隐藏/显示)

@model TWeb.Models.LoginModel

然后我有“电话营销”控制器有视图:

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

4 回答 4

2

您的“_LoginPartial”需要“LoginModel”模型,但由于您没有提供任何模型,Razor 引擎将其模型设置为当前视图模型(“db.Telemarketings.ToList()”)。

你所要做的就是以某种方式设置它的模型,可能是这样的:

@Html.Partial("_LoginPartial", new LoginModel()) 
于 2013-01-28T23:49:47.950 回答
2

问题 1)您的 Partial 需要一个模型,而您没有通过一个模型。正确的语法:@Html.Partial("_LoginPartial", Model.LoginModel)

问题2) _layout,据我所知,不能通过模型

解决方案 1: 使用 ActionPartial。AcionPartials 的调用方式类似,

@Html.Action("/Tools/_LoginPartial"). 

不同之处在于它们有一个 ActionMethod Associated 可以返回一个模型

   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) 
于 2013-01-28T23:52:24.883 回答
0

最简单的方法是从 Login Div 中删除模型声明 :)。

于 2013-01-29T05:55:13.963 回答
0

您可以使用此代码

 @Html.Partial("Partial page", new ModelFroLogin()) 
于 2013-01-29T06:07:26.203 回答