В настоящее время изучает Asp. Net Core. Сначала я учился со страницами Razor, и все работало нормально, но я отказался от них и предпочел сначала ознакомиться с MVC.
Несмотря на онлайн-курсы и др. c. Я три дня боролся, чтобы получить простую строку для отображения с помощью ViewModel, и теперь мой разум измучен!
Я хочу вставить строку на мою страницу cs html, чтобы строка могла происходят из библиотеки строк. У меня все это было настроено и отлично работало со страницами Razor, но я не могу получить простую строку для отображения с использованием MVC, если я не использую ViewBag. Я хочу использовать ViewModel. Что мне не хватает?
Любая помощь будет принята с благодарностью.
AboutViewModel.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace MyApp.Models
{
public class AboutViewModel
{
public string Title { get; set; }
public void OnGet()
{
Title = "Test";
}
}
}
AboutController.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Localization;
using Microsoft.AspNetCore.Mvc;
using MyApp.Models;
namespace MyApp.Controllers
{
public class AboutController : Controller
{
public IActionResult About()
{
return View();
}
}
}
About.cs html
@model AboutViewModel
@{
ViewData["Title"] = _loc["About Us"];
}
<body>
<div>
@Model.Title
</div>
</body>
Ошибка:
NullReferenceException: Object reference not set to an instance of an object.
AspNetCore.Views_About_About.<ExecuteAsync>b__12_2() in About.cshtml, line 22
NullReferenceException: Object reference not set to an instance of an object.
AspNetCore.Views_About_About.<ExecuteAsync>b__12_2() in About.cshtml
+
@Model.Title
Microsoft.AspNetCore.Razor.Runtime.TagHelpers.TagHelperExecutionContext.SetOutputContentAsync()
AspNetCore.Views_About_About.ExecuteAsync() in About.cshtml
+
ViewData["Title"] = _loc["About Us"];
Microsoft.AspNetCore.Mvc.Razor.RazorView.RenderPageCoreAsync(IRazorPage page, ViewContext context)
Microsoft.AspNetCore.Mvc.Razor.RazorView.RenderPageAsync(IRazorPage page, ViewContext context, bool invokeViewStarts)
Microsoft.AspNetCore.Mvc.Razor.RazorView.RenderAsync(ViewContext context)
Microsoft.AspNetCore.Mvc.ViewFeatures.ViewExecutor.ExecuteAsync(ViewContext viewContext, string contentType, Nullable<int> statusCode)
Microsoft.AspNetCore.Mvc.ViewFeatures.ViewExecutor.ExecuteAsync(ActionContext actionContext, IView view, ViewDataDictionary viewData, ITempDataDictionary tempData, string contentType, Nullable<int> statusCode)
Microsoft.AspNetCore.Mvc.ViewFeatures.ViewResultExecutor.ExecuteAsync(ActionContext context, ViewResult result)
Microsoft.AspNetCore.Mvc.ViewResult.ExecuteResultAsync(ActionContext context)
Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeNextResultFilterAsync>g__Awaited|29_0<TFilter, TFilterAsync>(ResourceInvoker invoker, Task lastTask, State next, Scope scope, object state, bool isCompleted)
Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Rethrow(ResultExecutedContextSealed context)
Мысли:
Я почти уверен, что перехожу здесь со страницами Razor, и мой метод OnGet бесполезен для MVC? Я пробовал вставить в свой контроллер всевозможный код, но ничего не работает.
Ответ на предложение ниже:
Если я изменю свой контроллер на:
public IActionResult About()
{
var viewModel = new AboutViewModel();
return View(viewModel);
}
, ошибка исчезает, но строка по-прежнему не отображается.