web-dev-qa-db-fra.com

Pourquoi mon objet Model est-il toujours nul sur ma page Razor dans l'application dotnet core 2.x Razor Page?

Je crée une vue partielle dans le cadre de mon Index.cshtml. Je suis les bases décrites dans l'article Microsoft => https://docs.Microsoft.com/en-us/aspnet/core/mvc/views/partial?view=aspnetcore-2.1

Le résumé est que je suis: en ajoutant une plage à mon fichier Index.cshtml qui est en fait chargé avec le HTML à partir d'une page Razor. Le code HTML approprié dans Index.cshtml ressemble à ceci:

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

J'ai ajouté une propriété publique à mon IndexModel nommé UserName dans le RazorPage et il ressemble à ceci:

namespace FirstCore.Pages
{
    public class IndexModel : PageModel
    {

        public string UserName;
        public void OnGet()
        {

        }
    }
}

C'est très simple pour cet exemple. Ainsi, dans le code HTML dans Index.cshtml, vous pouvez voir que j'ai défini la valeur de cette propriété publique sur "IndexUser", puis je passe le nom de la page Razor ("BasicPartial" - View) et l'objet Model au BasicaPartial Page de rasoir.

La page BasicPartial est très simple - a été générée à partir du modèle Visual Studio 2017 - Ajouter ... Page Razor ... L'ensemble des choses ressemble à:

@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>

En fait, la seule partie importante est le et l'endroit où je lis la valeur de la propriété UserName du modèle passé dans le modèle. Vous pouvez voir que j'ai également défini le @model comme un IndexModel en haut.

Le problème principal - Le modèle est TOUJOURS nul

Quand je lance cet exemple très simple. L'application me dit que l'objet Model est nul.

Model is null

Vous pouvez croire que c'est le UserName qui est nul, mais si je mets une directive très simple en haut comme

<div>@Model</div> 

Ensuite, il me dit que Model est nul, même si je sais que je le transmets.

Savez-vous pourquoi il est nul?

12
raddevus

Comme OP l'a souligné , la suppression de la directive @page corrigera les choses.

À partir des documents pour @page

@page transforme le fichier en une action MVC - ce qui signifie qu'il gère les demandes directement, sans passer par un contrôleur.

En d'autres termes, votre contrôleur n'était pas réellement utilisé, bien qu'il soit appelé *.
* Au moins dans mon cas, mon contrôleur a été appelé. Je n'ai pas testé le code OP

Certainement un design imparfait.

0
Mars