2011-07-10 6 views
1

である必要があります。MVC3を掘り起こすのが初めてで、問題が発生しました。辞書に渡されたモデルアイテムのタイプは... utです。この辞書はモデルタイプが

私は私のマスタービューを編集し、ユーザーがログインしていないときにすべてのページに表示されるように、ログインボックスをしたいんだ、私はこのコードを使用してこれをやった:。

@if (Request.IsAuthenticated) 
     { 
<text>Welcome <strong>@User.Identity.Name</strong>! 
[ @Html.ActionLink("Log Off", "LogOff", "Account") ]</text> 
     } 
     else 
     { 
      Html.RenderPartial("../Account/LogOn"); 
     } 

は、これは動作しますHomeControllerの私の通常のIndexメソッドに行くとき。私NewsControllerのIndexメソッドに行くとき

はしかし、私は次のエラーを取得する:

The model item passed into the dictionary is of type 'System.Collections.Generic.List`1[LeagueSite.Models.News]', but this dictionary requires a model item of type 'LeagueSite.Models.LogOnModel'.

私は問題はなく、実際にそれのためのsollutionを知らないが何であるかを理解しています。

ビューのログオンは、この(標準MVC3ログオンビュー)のようになります。

@model LeagueSite.Models.LogOnModel 

@{ 
    ViewBag.Title = "Log On"; 
} 

<h2>Login</h2> 
<p> 
    Please enter your user name and password. @Html.ActionLink("Register", "Register") if you don't have an account. 
</p> 

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script> 

@Html.ValidationSummary(true, "Login was unsuccessful. Please correct the errors and try again.") 

@using (Html.BeginForm()) { 
    <div> 
     <fieldset> 
      <legend>Account Information</legend> 

      <div class="editor-label"> 
       @Html.LabelFor(m => m.UserName) 
      </div> 
      <div class="editor-field"> 
       @Html.TextBoxFor(m => m.UserName) 
       @Html.ValidationMessageFor(m => m.UserName) 
      </div> 

      <div class="editor-label"> 
       @Html.LabelFor(m => m.Password) 
      </div> 
      <div class="editor-field"> 
       @Html.PasswordFor(m => m.Password) 
       @Html.ValidationMessageFor(m => m.Password) 
      </div> 

      <div class="editor-label"> 
       @Html.CheckBoxFor(m => m.RememberMe) 
       @Html.LabelFor(m => m.RememberMe) 
      </div> 

      <p> 
       <input type="submit" value="Log On" /> 
      </p> 
     </fieldset> 
</div> 

} `

任意のヒント/アイデア?

答えて

1

クイックや汚れ:代わりにHtml.RenderPartial使用Html.RenderActionの:

Html.RenderAction("LogOn", "Account"); 

AccountコントローラのLogOnアクションでPartialViewを返すようにしたり、スタックオーバーフローを取得し、カッシーニがクラッシュすることを確認:

public ActionResult LogOn() 
{ 
    return PartialView(); 
} 
+0

を扱うことができるでしょうが、私はリフレッシュをヒットしない限り、私はそれを歓迎し、ユーザのものを示す(前二回ログインする必要があります最初に私が提出を押した後) どうすればこの問題を防ぐことができますか? – Thomas

+0

+1のため、動作しますが、レイアウトファイルが再び呼び出されます。これは非常に醜い – deltree

1

あなたの「ニュース」ビューには、すでにモデルが関連付けられていると思います。これがうまく

@model LeagueSite.Models.News 

を?:ようなので、場合、あなたの部分図にモデルを渡していない場合 は多分それは、始まり、その後、フレームワークは、その部分のモデルは「LeagueSite.Modelsであることをデフォルトで想定しています。ニュース "はもちろん、あなたが望むものではありません。あなたはこのようにログオン部分図にLogOnModelを渡す必要があります。

Html.RenderPartial("../Account/LogOn", Model.ObjLogonModel); 

これはあなたの「ニュース」モデルにLogonModelのインスタンスを持っていることを前提としています。その後、私は今、このようにそれを試してみた、それは動作しますが、もう何のエラーを得なかっログオンアクションに に関して

関連する問題