2016-11-18 3 views
1

既存のデータベースから読み込むためにEntity Framework Coreを使用するASP.NET Core Webアプリケーションを作成しました。私は、私のFacilityRevenueテーブルに新しいエントリを作成するビューで、選択したコントロールにFacilityNamesのリストを設定したいと思います。ASP.NET Core Helper Throwsオブジェクト参照がオブジェクトのインスタンスに設定されていません

私は次のようにFacilityRevenueコントローラがあるのメソッドを作成します。

 <label asp-for="FacilityName" class="col-md-2 control-label"></label> 
     <div class="col-md-10"> 
      <select asp-for="FacilityId" asp-items="ViewBag.FacilityID"> 
       <option value="">-- Select Facility --</option> 
      </select> 
      <span asp-validation-for="FacilityName" class="text-danger" /> 
     </div> 

次のように私のFacilityRevenueモデルは次のとおりです:

public partial class FacilityRevenue 
{ 
    public string FacilityName { get; set; } 
    public DateTime Date { get; set; } 
    public decimal? TotalInvoices { get; set; } 
    public decimal? TotalRevenue { get; set; } 
    public int RecordId { get; set; } 
    public int? FacilityId { get; set; } 

    public virtual FacilityMaster Facility { get; set; } 
} 
ビューは、次のマークアップが含ま作成

public IActionResult Create() 
    { 
     PopulateFacilityDropDownList(); 
     return View(); 
    } 

    private void PopulateFacilityDropDownList 
    (object selectedFacility = null) 
    { 
     var facilityQuery = from f in _context.FacilityMaster 
          orderby f.FacilityName 
          select f; 
     ViewBag.FacilityID = new SelectList(facilityQuery.AsNoTracking(), "FacilityID", "FacilityName", selectedFacility); 
    } 

私を

スタックトレースは次のとおりです。

System.NullReferenceException: Object reference not set to an instance of an 
object. 
at Microsoft.AspNetCore.Mvc.Rendering.MultiSelectList.Eval(Object container, 
String expression) 
at Microsoft.AspNetCore.Mvc.Rendering.MultiSelectList. 
GetListItemsWithValueField() 
at Microsoft.AspNetCore.Mvc.Rendering.MultiSelectList.GetEnumerator() 
at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection) 
at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source) 
at Microsoft.AspNetCore.Mvc.ViewFeatures.DefaultHtmlGenerator. 
GenerateGroupsAndOptions(String optionLabel, IEnumerable`1 selectList, 
ICollection`1 currentValues) 
at 
Microsoft.AspNetCore.Mvc.ViewFeatures. 
DefaultHtmlGenerator.GenerateSelect(ViewContext viewContext, ModelExplorer 
modelExplorer, String optionLabel, String expression, IEnumerable`1 
selectList, ICollection`1 currentValues, Boolean allowMultiple, Object 
htmlAttributes) 
at 
Microsoft.AspNetCore.Mvc.TagHelpers.SelectTagHelper.Process(TagHelperContext 
context, TagHelperOutput output) 
at 
Microsoft.AspNetCore.Razor.TagHelpers.TagHelper. 
ProcessAsync(TagHelperContext context, TagHelperOutput output) 
at Microsoft.AspNetCore.Razor.Runtime.TagHelpers.TagHelperRunner. 
<RunAsync>d__0.MoveNext() 

上記のエラーを解決し、選択コントロールを機能リストで水分補給する機能を達成するにはどうすればよいですか?

+0

エラーがViewBag.FacilityID'が 'null'なのでは'ので、あなたがフォームを送信するので(おそらく、その後、ビューを返しますが、 'ViewBag'プロパティを再増殖するのを忘れています。しかし、あなたのバインディングとSelectListのプロパティに同じ名前を使用しないでください –

答えて

3

問題は、次の行のタイプミスです:

ViewBag.FacilityID = new SelectList(facilityQuery.AsNoTracking(), "FacilityID", "FacilityName", selectedFacility); 

"FacilityID""FacilityId"でなければなりません。それはあなたがあなたのモデルで定義されたものです:

public int? FacilityId { get; set; } 
+0

これは他の人に役立つかもしれません:私の場合は、実際にフィールドが単にIDと呼ばれていたとき私は "BookID"デフォルトモデル。 – fiacobelli

関連する問題