2017-12-13 8 views
1

コントローラから部分ビューにデータを表示する必要があります。私はすでに部分ビューにデータを渡していますが、部分ビューからはアクセスできません。私が得ているエラーは実際に私が逃した何かを言っている。より良い理解のために下の図を確認してください。あなたが何かを理解していない場合は質問してください。パーシャルビューからモデルデータにアクセスできない

sample image

sample image

_UserNav.cshtml:

@model User 
<h2>@Model.FirstName</h2> 

_Layout.cshtml:

if (this.User.IsInRole("User")) 
       { 
        //@Html.Partial("_UserNav"); 

        @Html.Action("_UserNav", "Dashboard", new { id = "[email protected]" }); 
       } 

コントローラー:

[ChildActionOnly] 
     public PartialViewResult _UserNav(string id) 
     { 
      using (mydb db = new mydb()) 
      { 
       Models.User user = db.Users.Where(x => x.Email == id).FirstOrDefault(); 
       return PartialView("_UserNav", user); 
      } 
     } 
+1

あなたは@modelの名前空間に完全修飾名を指定する必要があると信じています。ユーザー – koryakinp

+0

https://ibb.co/gvpVQRは完全な名前 "Model.User"を使用していますが、 –

答えて

0

型宣言は、完全修飾されている必要があります。あなたのコードのファイルは、それらの上部に、このようなものを持っているか考えてみましょう:

using SomeNamespace; 
using SomeNamespace.AnotherNamespace; 
// etc. 

これらはあなたがそのファイル内のコードで使用する特定のタイプ名を検索するようにコンパイラに伝えます。現在、あなたのビューファイルにはそのファイルがありません。あなたはMVCの古いバージョンを使っているなら、あなたは、ビューのフォルダにWeb.configにそれらのディレクティブを追加することができます(5前に、私は思います):

<namespaces> 
    <add namespace="SomeNamespace" /> 
    <add namespace="SomeNamespace.AnotherNamespace" /> 
    <!-- etc. --> 
</namespaces> 

は、より新しいバージョンの場合は、ビュー自体にディレクティブを置くことができます(少なくとも、私がすることができますかなり確信している):

@using SomeNamespace 
@using SomeNamespace.AnotherNamespace 

あるいは、任意およびすべてのMVC /カミソリのバージョン/ .NET/C#/何でもあなただけの完全缶に、おそらく最も簡単なアプローチものです - タイプを確認してください:

@model SomeNamespace.AnotherNamespace.User 

私はあなたの実際の名前空間がどのように見えるか推測にした場合、それはのようなものが考えられます。

@model MvcApplication1.Models.User 

しかし、もちろん、あなたが実際の名前空間は、あなたの中にあるかどうか確認する必要がありますコード。

関連する問題