在 ASP.NET Core MVC 的视图中使用 ViewModel 中的 List<Model> 时出错

问题描述 投票:0回答:1

我目前在不同的视图中使用此方法,没有错误,但现在在新视图中给出错误 -

System.NullReferenceException:“未将对象引用设置为对象的实例。”

Microsoft.AspNetCore.Mvc.Razor.RazorPage.Model.get 返回 null。

System.NullReferenceException HResult=0x80004003 Message=未将对象引用设置到对象的实例。源=网站 StackTrace:atAspNetCoreGenerateDocument.Views_Post_Create.<< ExecuteAsync >b__53_19>d.MoveNext() in G:\...\Views\Post\Create.cshtml:第 54 行


我正在使用数据库表作为我的下拉列表。我首先尝试使用

IEnumerable
但它导致了同样的错误。我使用谷歌但无法解决我的错误。这是我的代码-

型号:

public class PostCategoryModel
{
    [Key]
    public int Id { get; set; }
    public string CategoryName { get; set; }
}

视图模型:

public class CreatePostViewModel
{
    // Code before

    public List<PostCategoryModel>? PostCategoryList { get; set; }
}

查看:

<div class="col-md-12 mb-3">
    <label asp-for="PostCategory" class="form-label">Post Category</label>SelectList(Model.PostCategoryList,"Value", "Text"))" class="form-select" required>*@
    <select asp-for="PostCategory" class="form-select">
        <option hidden selected>Open this select menu</option>
        @foreach (var item in Model.PostCategoryList)
        {
            <option value="@item.Id">@item.CategoryName</option>
        }
    </select>
    <div class="invalid-feedback">
        Please select a valid category.
    </div>
</div>
c# html compiler-errors asp.net-core-mvc dropdown
1个回答
0
投票

在将视图模型发送到视图之前,请确保视图模型已正确填充。 在您想要返回视图的 httpget 操作中,请确保视图模型填充如下:

 var viewModel = new CreatePostViewModel();
 viewModel.PostCategoryList = GetPostCategories(); // Fetch data from db
 return View(viewModel);

还有,因为List

@if (Model.PostCategoryList != null && Model.PostCategoryList.Any())
{
    <select asp-for="PostCategory" class="form-select">
        <option hidden selected>Open this select menu</option>
        @foreach (var item in Model.PostCategoryList)
        {
            <option value="@item.Id">@item.CategoryName</option>
        }
    }
}
else
{
    <p>No categories available.</p>
}

并参考您的演讲“我目前在不同的视图中使用此方法,没有错误”,也许在该方法中,您初始化了列表

public class CreatePostViewModel
{
    public List<PostCategoryModel> PostCategoryList { get; set; }

    public CreatePostViewModel()
    {
        PostCategoryList = new List<PostCategoryModel>();
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.