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であることがわかります。
あなたはそれがnullであるUserNameであると信じるかもしれませんが、私が非常に単純なディレクティブを上のように置くと
<div>@Model</div>
それから、それが渡されていることがわかっているにもかかわらず、Modelがnullであることがわかります。
それがnullである理由を知っていますか?
OPが指摘 のように、@ pageディレクティブを削除すると問題が修正されます。
@pageは、ファイルをMVCアクションにします。つまり、コントローラーを経由せずにリクエストを直接処理します。
言い換えれば、あなたのコントローラーは実際には使用されていなかった、呼び出されたにもかかわらず*。
*少なくとも私の場合、私のコントローラーはと呼ばれていました。 OPのコードはテストしていません
確かに欠陥のあるデザイン。