[c#] null 참조에서 런타임 바인딩을 수행 할 수 없지만 null 참조가 아닙니다.

사용 : MVC 4, ASP.NET Razor

불가능한 것 같은 오류가 발생합니다. 그것은 내가 null-reference, States를 사용하고 있다고 말하지만 분명히 설정되고 있습니다.

제어 장치:

public ActionResult Index()
{
    Dictionary<int, string> states = new Dictionary<int, string>()
    {
        { -1, "a"},
        { 0, "b"},
        { 1, "c"},
        { 2, "d"},
    };

    //assigning states
    ViewBag.States = states;

    foreach (KeyValuePair<int, string> de in ViewBag.States)
    {
        Debug.WriteLine(de.Key);
    }
    return View();
}

보기:

<div class="search-input">
    <select>
        @foreach (KeyValuePair<int, string> de in ViewBag.States)
        {
            <option value="@de.Key">@de.Value</option>
        }
    </select>
</div>

오류:

Cannot perform runtime binding on a null reference
Line 54: @foreach (KeyValuePair<int, string> de in ViewBag.States)



답변

해결책을 찾았습니다. ViewBag.Typo <-내 뷰에 오타가 있습니다. 이로 인해 오류가 발생했지만 디버거가 관련없는 위치에 예외를 배치했습니다.


답변

이 오류 는 메서드를 호출하는 면도기 코드에 ViewBag 가 존재하지 않을 때 발생합니다 .

제어 장치

public ActionResult Accept(int id)
{
    return View();
}

면도칼:

<div class="form-group">
      @Html.LabelFor(model => model.ToId, "To", htmlAttributes: new { @class = "control-label col-md-2" })
     <div class="col-md-10">
           @Html.Flag(Model.from)
     </div>
</div>
<div class="form-group">
     <div class="col-md-10">
          <input value="@ViewBag.MaximounAmount.ToString()" />@* HERE is the error *@
     </div>
</div>

어떤 이유로 .net은 올바른 줄에 오류를 표시 할 수 없습니다.

일반적으로 이것은 많은 시간을 낭비합니다.


답변

이 예외는 리플렉션을 사용하여 존재하지 않는 속성이 동적으로 업데이트되는 경우에도 throw됩니다.

리플렉션을 사용하여 속성 값을 동적으로 업데이트하는 경우 전달 된 PropertyName속성이 실제 속성과 동일한 지 확인하는 것이 좋습니다.

제 경우에는 업데이트를 시도 Employee.firstName했지만 속성은 실제로 Employee.FirstName.

명심할 가치가 있습니다. 🙂


답변

이 오류에 대한 내 해결책은 .NET Core에 대한 참조가있는 다른 프로젝트에서 복사하여 붙여 넣는 것 @Model.Id입니다. 이 특정 페이지를하지 않았다 모델이 있지만 오류 라인은 지금까지 실제 오류에서 떨어져 나에 대해 그것을 발견되지 않았다을!


답변

null이 아닌 상태를 정의해야합니다.

@if (ViewBag.States!= null)
{
    @foreach (KeyValuePair<int, string> de in ViewBag.States)
    {
        value="@de.Key">@de.Value
    }
}


답변

세트

 Dictionary<int, string> states = new Dictionary<int, string>()

함수 외부의 속성으로 함수 내부에 항목을 삽입하면 작동합니다.


답변