DepartmentNamePageModel and DepartmentNameSL work OK - my RentalPropertyNameSL throws Object reference not set to an instance of an object

  • Thread starter Thread starter pittersalso
  • Start date Start date
P

pittersalso

Guest
Hi, I have used Contoso University tutorial as a basis for my project - I have checked four times to make sure there are no typo errors (the fact that it compiles OK)

but when I click on "Create New" I get the above error.

Breakpoint on

RentalPropertyNameSL = new SelectList(propertyQuery.AsNoTracking(),
"RentalPropertyID", "PropertyName", selectedRentalProperty);

RentalPropertyNameSL is null, after F10

Name Value Type
RentalPropertyNameSL {Microsoft.AspNetCore.Mvc.Rendering.SelectList} Microsoft.AspNetCore.Mvc.Rendering.SelectList


shows correctly but throws this error

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

Microsoft.AspNetCore.Mvc.Rendering.MultiSelectList.GetListItemsWithValueField()

  • Stack
  • Query
  • Cookies
  • Headers
    • NullReferenceException: Object reference not set to an instance of an object.
      • Microsoft.AspNetCore.Mvc.Rendering.MultiSelectList.GetListItemsWithValueField()
      • Microsoft.AspNetCore.Mvc.Rendering.MultiSelectList.GetListItems()
      • Microsoft.AspNetCore.Mvc.Rendering.MultiSelectList.GetEnumerator()
      • System.Collections.Generic.List<T>.AddEnumerable(IEnumerable<T> enumerable)
      • System.Linq.Enumerable.ToList<TSource>(IEnumerable<TSource> source)
      • Microsoft.AspNetCore.Mvc.ViewFeatures.DefaultHtmlGenerator.GenerateGroupsAndOptions(string optionLabel, IEnumerable<SelectListItem> selectList, ICollection<string> currentValues)
      • Microsoft.AspNetCore.Mvc.ViewFeatures.DefaultHtmlGenerator.GenerateSelect(ViewContext viewContext, ModelExplorer modelExplorer, string optionLabel, string expression, IEnumerable<SelectListItem> selectList, ICollection<string> currentValues, bool allowMultiple, object htmlAttributes)
      • Microsoft.AspNetCore.Mvc.TagHelpers.SelectTagHelper.Process(TagHelperContext context, TagHelperOutput output)
      • Microsoft.AspNetCore.Razor.TagHelpers.TagHelper.ProcessAsync(TagHelperContext context, TagHelperOutput output)
      • Microsoft.AspNetCore.Razor.Runtime.TagHelpers.TagHelperRunner.RunAsync(TagHelperExecutionContext executionContext)
      • Rent2.Pages.Tenants.Pages_Tenants_Create.<ExecuteAsync>b__21_0() in Create.cshtml

        <button class="expandCollapseButton" data-frameid="frame11" style="cursor:pointer;float:left;height:16px;width:16px;font-size:10px;background-color:#eeeeee;padding:0px;border-width:0px;border-style:initial;border-color:initial;margin:0px;">+</button>
        1. asp-items="@Model.RentalPropertyNameSL">
      • Microsoft.AspNetCore.Razor.Runtime.TagHelpers.TagHelperExecutionContext.GetChildContentAsync(bool useCachedResult, HtmlEncoder encoder)
      • Microsoft.AspNetCore.Mvc.TagHelpers.RenderAtEndOfFormTagHelper.ProcessAsync(TagHelperContext context, TagHelperOutput output)
      • Microsoft.AspNetCore.Razor.Runtime.TagHelpers.TagHelperRunner.RunAsync(TagHelperExecutionContext executionContext)
      • Rent2.Pages.Tenants.Pages_Tenants_Create.ExecuteAsync() in Create.cshtml

        <button class="expandCollapseButton" data-frameid="frame15" style="cursor:pointer;float:left;height:16px;width:16px;font-size:10px;background-color:#eeeeee;padding:0px;border-width:0px;border-style:initial;border-color:initial;margin:0px;">+</button>
        1. ViewData["Title"] = "Create Course";
      • Microsoft.AspNetCore.Mvc.Razor.RazorView.RenderPageCoreAsync(IRazorPage page, ViewContext context)
  • Microsoft.AspNetCore.Mvc.Razor.RazorView.RenderPageAsync(IRazorPage page, ViewContext context, bool invokeViewStarts)


using Rent2.Data;
using System.Linq;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.AspNetCore.Mvc.Rendering;
using Microsoft.EntityFrameworkCore;

namespace Rent2.Pages.Tenants
{
public class RentalPropertyNamePageModel : PageModel
{
public SelectList RentalPropertyNameSL { get; set; }

public void PopulateRentalPropertyDropDownList(RentContext _context,
object selectedRentalProperty = null)
{
var propertyQuery = from d in _context.RentalProperties
orderby d.PropertyName
select d;

RentalPropertyNameSL = new SelectList(propertyQuery.AsNoTracking(),
"RentalPropertyID", "PropertyName", selectedRentalProperty);
}
}
}


@page
@model Rent2.Pages.Tenants.CreateModel

@{
ViewData["Title"] = "Create Course";
}

<h2>Create</h2>

<h4>Tenant</h4>
<hr />
<div class="row">
<div class="col-md-4">
<form method="post">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<div class="form-group">
<label asp-for="Tenant.LastName" class="control-label"></label>
<input asp-for="Tenant.LastName" class="form-control" />
<span asp-validation-for="Tenant.LastName" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Tenant.FirstMidName" class="control-label"></label>
<input asp-for="Tenant.FirstMidName" class="form-control" />
<span asp-validation-for="Tenant.FirstMidName" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Tenant.StartDate" class="control-label"></label>
<input asp-for="Tenant.StartDate" class="form-control" />
<span asp-validation-for="Tenant.StartDate" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Tenant.VacatingDate" class="control-label"></label>
<input asp-for="Tenant.VacatingDate" class="form-control" />
<span asp-validation-for="Tenant.VacatingDate" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Tenant.MobileNumber" class="control-label"></label>
<input asp-for="Tenant.MobileNumber" class="form-control" />
<span asp-validation-for="Tenant.MobileNumber" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Tenant.RentalProperty" class="control-label"></label>
<select asp-for="Tenant.RentalPropertyID" class="form-control"
asp-items="@Model.RentalPropertyNameSL">
<option value="">-- Select Rental Property --</option>
</select>

<span asp-validation-for="Tenant.RentalPropertyID" class="text-danger"></span>
</div>
<div class="form-group">
<input type="submit" value="Create" class="btn btn-default" />
</div>
</form>
</div>
</div>

<div>
<a asp-page="Index">Back to List</a>
</div>

@section Scripts {
@{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
}


Here's Contoso's two code pages

using ContosoUniversity.Data;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.AspNetCore.Mvc.Rendering;
using Microsoft.EntityFrameworkCore;
using System.Linq;

namespace ContosoUniversity.Pages.Courses
{
public class DepartmentNamePageModel : PageModel
{
public SelectList DepartmentNameSL { get; set; }

public void PopulateDepartmentsDropDownList(SchoolContext _context,
object selectedDepartment = null)
{
var departmentsQuery = from d in _context.Departments
orderby d.Name // Sort by name.
select d;

DepartmentNameSL = new SelectList(departmentsQuery.AsNoTracking(),
"DepartmentID", "Name", selectedDepartment);
}
}
}

@page
@model ContosoUniversity.Pages.Courses.CreateModel
@{
ViewData["Title"] = "Create Course";
}
<h2>Create</h2>
<h4>Course</h4>
<hr />
<div class="row">
<div class="col-md-4">
<form method="post">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<div class="form-group">
<label asp-for="Course.CourseID" class="control-label"></label>
<input asp-for="Course.CourseID" class="form-control" />
<span asp-validation-for="Course.CourseID" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Course.Title" class="control-label"></label>
<input asp-for="Course.Title" class="form-control" />
<span asp-validation-for="Course.Title" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Course.Credits" class="control-label"></label>
<input asp-for="Course.Credits" class="form-control" />
<span asp-validation-for="Course.Credits" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Course.Department" class="control-label"></label>
<select asp-for="Course.DepartmentID" class="form-control"
asp-items="@Model.DepartmentNameSL">
<option value="">-- Select Department --</option>
</select>
<span asp-validation-for="Course.DepartmentID" class="text-danger" />
</div>
<div class="form-group">
<input type="submit" value="Create" class="btn btn-default" />
</div>
</form>
</div>
</div>
<div>
<a asp-page="Index">Back to List</a>
</div>
@section Scripts {
@{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
}

Continue reading...
 
Back
Top