web-dev-qa-db-ja.com

dotnet core 2.x Razor PageアプリのRazorページでModelオブジェクトが常にnullになるのはなぜですか?

Index.cshtmlの一部としてパーシャルビューを作成しています。 Microsoftの記事で概説されている基本に従っています=> https://docs.Microsoft.com/en-us/aspnet/core/mvc/views/partial?view=aspnetcore-2.1

その要約は、私は次のとおりです:実際にRazorページからHTMLで読み込まれるIndex.cshtmlファイルにスパンを追加します。 Index.cshtmlの関連するHTMLは次のようになります。

<span id="basicView">
    @{ 
        Model.UserName = "IndexUser";
        await Html.RenderPartialAsync("BasicPartial", Model);
    }
</span>

RazorPageでUserNameという名前のIndexModelにパブリックプロパティを追加したところ、次のようになります。

namespace FirstCore.Pages
{
    public class IndexModel : PageModel
    {

        public string UserName;
        public void OnGet()
        {

        }
    }
}

この例では、非常にシンプルに保たれています。したがって、Index.cshtmlのHTMLでは、そのパブリックプロパティの値を "IndexUser"に設定し、Razorページ( "BasicPartial"-ビュー)の名前とモデルオブジェクトをBasicaPartialに渡していることがわかります。かみそりのページ。

BasicPartialページは非常にシンプルです-Visual Studio 2017テンプレート-Add ... Razor Page ...から生成されました。全体は次のようになります。

@page
@model IndexModel
@*
    For more information on enabling MVC for empty projects, visit http://go.Microsoft.com/fwlink/?LinkID=397860
*@
<div>This is the text and the user name is @(Model.UserName).</div>

実際、唯一重要な部分は、渡されたモデルからUserNameのプロパティ値を読み取る場所です。上部で、@ modelをIndexModelとして定義したことも確認できます。

主な問題-モデルは常にNullです

この非常に単純な例を実行すると、アプリケーションから、Modelオブジェクトがnullであることがわかります。

Model is null

あなたはそれがnullであるUserNameであると信じるかもしれませんが、私が非常に単純なディレクティブを上のように置くと

<div>@Model</div> 

それから、それが渡されていることがわかっているにもかかわらず、Modelがnullであることがわかります。

それがnullである理由を知っていますか?

12
raddevus

OPが指摘 のように、@ pageディレクティブを削除すると問題が修正されます。

@ pageのドキュメントから

@pageは、ファイルをMVCアクションにします。つまり、コントローラーを経由せずにリクエストを直接処理します。

言い換えれば、あなたのコントローラーは実際には使用されていなかった、呼び出されたにもかかわらず*。
*少なくとも私の場合、私のコントローラーはと呼ばれていました。 OPのコードはテストしていません

確かに欠陥のあるデザイン。

0
Mars