У меня возникли проблемы с попыткой создать представление со строго типизированной моделью. Независимо от того, что я передаю в качестве модели View()
, я всегда получаю NullReferenceException
, даже когда просто обращаюсь к Model
.
Я даже не могу проверить, является ли модель нулевой перед выполнением остальной части бритвенной страницы; просто делать if (Model != null)
тоже бросает тот же NullReferenceException
.
Index.cshtml
@page
@model EncodeModel
@{
Layout = "~/Pages/Shared/_Layout.cshtml";
}
<h2>Encode</h2>
<div id = "progress">
@await Html.PartialAsync("~/Encoder/MVC/EncodeProgress.cshtml", new EncodeModule())
</div>
EncodeProgress.cshtml
@page
@model FFenc.IEncoderModule
@{
var module = Model; //this throws the NullReferenceException
}
Startup.cs
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseCookiePolicy();
app.UseMvc();
}
Трассировка стека исключений:
NullReferenceException: Object reference not set to an instance of an object.
AspNetCore.Encoder_MVC_EncodeProgress.get_Model()
AspNetCore.Encoder_MVC_EncodeProgress.ExecuteAsync() in EncodeProgress.cshtml
var module = Model;
Что я делаю не так? Я пробовал несколько исправлений и обходных путей (используя ViewComponent вместо представления), но ничего не работает.
Некоторые похожие вопросы, которые я обнаружил, не решили мою проблему:
Ошибка NULL модели ASP.NET Core в представлении индекса
Я уже передаю модель, поэтому этот ответ ничего не меняет в том, что я делаю. Например, когда я пытался использовать контроллер в качестве обходного пути, то же самое NullReferenceException
произошло с этим кодом:
[Route("/encode/progress")]
public IActionResult GetProgress()
{
return View("~/Encoder/MVC/EncodeProgress.cshtml", new EncoderModule());
}
Я думаю, вы смешиваете Razor Pages с ASP.NET MVC. Попробуйте удалить директиву @page
, и ваша модель должна быть привязана к значению, переданному при вызове return View()
.
Предупреждаю, этот другой вопрос не имеет отношения к делу. ASP.NET Core (который включает MVC и Razor Pages) - довольно новая среда разработки, тогда как ASP.NET MVC (нет Core) существует уже почти десять лет. В частности, я думаю, что Razor Pages исполнилось около года. Если вы новичок во всем этом, это может немного запутать. Есть много совпадений, но есть и различия. Core - это идеальный вариант для любой новой разработки. Я просто хотел сообщить вам, чтобы вы встали на верный путь.
Спасибо, это исправлено. Resharper помечает переменную
Model
как неопределенную без директивы@page
, но я нашел еще один вопрос по этому поводу: stackoverflow.com/questions/33130521/…. Еще раз спасибо!