zakres ViewData

0

w pliku index.cshtml:

@page
@model NeonMvc.Views.Home.IndexModel
@{ 

}

<div class="text-center text-info">
    <p>@ViewData["Message"]</p>
</div>

w pliku index.cshtml.cs:

using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.AspNetCore.Authorization;

namespace NeonMvc.Views.Home
{
    [AllowAnonymous]
    public class IndexModel : PageModel
    {
        [ViewData]
        public string Title { get; set; }
        public string Message { get; set; }


        public void OnGet()
        {
            Title = "HomePage";
            Message = "strona startowa tutaj";
        }
    }
}

i dla czego ten error po odpaleniu strony: "NullReferenceException: Object reference not set to an instance of an object." ???

1

Bo Message w klasie nie ma atrubytu ViewData?

0

nawet bezpośrednio:

public void OnGet() {
       ViewData["Title"] = "HomePage";
}

nie działa i h.

0
[ViewData]
public string Title { get; set; }
public string Message { get; set; }

@somekind ci napisał: [ViewData], dotyczy tylko Title tutaj, a już Message nie. W OnGet nie ustawiaj ViewData["Title"], wystarczy Title.

Aczkolwiek zrobiłem tak samo jak Ty:

public void OnGet()
{
    ViewData["Some"] = "www";
}
<div class="text-center">
    @ViewData["some"]
</div>

I mi to działa (po restarcie aplikacji).

0

@Ktos:
Problem na pewno gdzie indziej leży. Uprościłem kod do maximum, zrestartowałem. Nadal nie działa. Coś mam źle w ustawieniach lub importach ale nie wiem co.
Obecnie kod wygląda jak poniżej:


using Microsoft.AspNetCore.Mvc.RazorPages;

namespace NeonMvc.Views.Home
{
    public class IndexModel : PageModel
    {
        public void OnGet()
        {
            ViewData["costam"] = "www";
        }
    }
}
@page
@model NeonMvc.Views.Home.IndexModel
@{ 
}
<div class="text-center">
    <p>@ViewData["costam"]</p>
</div>

Przecież to jak silnik hondy - nie ma co się zepsuć. Jednak nie działa.

EDIT:
zmieniłem to - nic nie robię w pliku index.cshtml.cs.
Błąd powstaje gdy próbuję odwołać się w index.cshtml do ViewData:

@page
@model NeonMvc.Views.Home.IndexModel
@{ 
    ViewData["Message"] = "message";
}
<div class="text-center text-info">
    <p>jakis neutralny text</p>
</div>

i mam NullReferenceException: Object reference not set to an instance of an object.

0

@WeiXiao: podczas wywołania linijki ViewData["Message"] = "message" wywala ten błąd.
Wydaje mi się, że w konwencji MVC nie można używać stron Razor to by wyjaśniało sytuację ponieważ gdy zastąpię stronę Razor, widokiem Razor (bez back-endu) to wszystko gites, mogę przypisać wartość do ViewData["costam" i potem z niej korzystać.

1

Wydaje mi się, że w konwencji MVC nie można używać stron Razor

Moment, moment - masz aplikację MVC, w której chcesz używać Razor Page? W Startup.cs w ConfigureServices masz services.AddRazorPages();?

0

Weź wrzuć cały kod na np. gh, bo tak to pewnie jeszcze trochę będziemy zgadywać.

Chociaż @Ktos chyba już trafił :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1