1

こんにちは、次のエラーが表示されます: ディクショナリに渡されたモデル アイテムのタイプは '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

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 に答える