2012-09-16 2 views
0

나는 다음과 같은 오류 메시지에 문제가 오전 : 라인MVC 오류가 개체의 인스턴스로 설정되지

Object reference not set to an instance of an object. 

휴식 :

Line 16:   </div> 
Line 17:   <div class="editor-field"> 
Line 18:    @Html.DropDownList("KPI.CSF.FYID", Model.Financial_Years) 
Line 19:    @Html.ValidationMessageFor(model => model.KPI.CSF.FYID) 
Line 20:   </div> 

이 양식 중에 발생을 내 mvc 프로젝트에 게시하십시오.

내가 작성 양식을로드 할 때 나는 다음의 뷰 모델을 전달하고있다 :

public class KPICreateFormViewModel 
    { 

     //Properties 
     public KPI KPI { get; set; } 
     public SelectList Financial_Years { get; private set; } 

     FYRepository fyrepo = new FYRepository(); 
     public KPICreateFormViewModel(KPI kpi) 
     { 
      KPI = kpi; 
      Financial_Years = new SelectList(fyrepo.GetFys(), "ID", "Financial_Year"); 

     } 

    } 

내가 다음에 ID 번호를 채 웁니다 다른 드롭 다운을 계단식으로 몇 가지 아약스를 시작하는 드롭 다운의 회계 연도를 사용을 내 게시물.

내 회계 연도 드롭 다운이 .. 내 컨트롤러의 HTTP POST 메서드 중 다시 아무것도 게시하고 싶지 않아 그래서 난 그냥 내가 괜찮을 것 다음 다시 전달하면 나는 생각 :

[HttpPost] 
    public ActionResult Create(KPI kpi) 
    { 
     try 
     { 

      kpirepository.Add(kpi); 
      kpirepository.Save(); 


      return RedirectToAction("Details", new { id = kpi.ID }); 
     } 
     catch 
     { 
      return View(); 
     } 
    } 

내가 가정 이 모든 것은 viewmodel을 기반으로하는 내보기와 이후에이 게시물을 나눠주고 있지 않기 때문에 발생합니다. 캐스케이드 코드로 어지러운 시간을 보내고 나서 내 머리가 조금 움직여서이 문제를 해결하려고합니다. 도움!

회계 연도 드롭 다운 보여주는 내보기의 관련 부분 :

@model ES_Business_Intelligence.ViewModels.Admin.KPICreateFormViewModel 

@using (Html.BeginForm()) { 
    @Html.ValidationSummary(true) 

    <fieldset> 
     <legend>KPI</legend> 
     <div class="editor-label"> 
      @Html.LabelFor(model => model.KPI.CSF.FYID) 
     </div> 
     <div class="editor-field"> 
      @Html.DropDownList("KPI.CSF.FYID", Model.Financial_Years) 
      @Html.ValidationMessageFor(model => model.KPI.CSF.FYID) 
     </div> 
+0

감사합니다! – munkee

답변

0

webdeveloper에서 문제를 확인한 후 좀 더 파고 들었고 양식 제출시 데이터를 반환 할 때 내 viewmodel의 특정 요소에 바인딩하지 말라고 알립니다. 내 ViewModel에 다음 코드를 추가 :

[Bind(Exclude = "Financial_Years")] 
    public class KPICreateFormViewModel 
    { 

     //Properties 
     public KPI KPI { get; set; } 
     public SelectList Financial_Years { get; private set; } 

     FYRepository fyrepo = new FYRepository(); 
     public KPICreateFormViewModel(KPI kpi) 
     { 
      KPI = kpi; 
      Financial_Years = new SelectList(fyrepo.GetFys(), "ID", "Financial_Year"); 

     } 

    } 

마법은 첫 번째 줄에있는 모든입니다 : 이것과 올바른 방향으로 날을 가리키는위한

[Bind(Exclude = "Financial_Years")] 
0

당신은 절대적으로 옳다, 당신은 강력하게보기를 입력 사용하고하려고 할 때 예외가 발생하는 이유는 경로 null보기에 게시 한 후, 먹으 렴 속성에 액세스하려면 (model => model.KPI.CSF.FYID). 만약 당신이 모델을 null 경우 솔루션으로 블록을 추가하고 HTML 마크 업을 무시할 수 있습니다.

관련 문제