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


80

사용 : 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)

3
먼저 방법을 올바르게 진행하고 있습니까?
Jon Skeet

1
Index()메서드와 뷰에 중단 점을 배치하고 이것이 무엇이 잘못되었는지 확인하는 데 도움이되는지 확인하십시오.
Tim S.

3
이 원인이 모든 것을 엉망으로 얻을 - 내 자신의 대답은, 모든 권리, 나는 전혀 관계가없는 개체에 오타가 있었다 나의 내부보기이었다 발견 나는 ViewBag.TypoObject는 <한
generalcoder

답변:


108

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


11
디버거가 뷰의 잘못된 지점에 예외를 배치하는 것과 동일한 문제가있었습니다. 더 아래에 널 참조가 있습니다.
user1616625

5
매우 성가신 특성. 제 말은 디버거입니다. 문제가 무엇인지, 어디에서 문제가 있는지 모르는 경우 실제로하는 척할 때 일이 더 어려워집니다 .
glenatron 2014 년

2
Arggggg! 이것에 한 시간을 보냈습니다! 몇 가지 다른 장소에서 사용되는 부분보기가있었습니다. 모델은 정확히 동일하게 생성되었지만 다른 작업이 아닌 한 작업 결과에서 참조 할 때 오류가 발생했습니다. ViewBag 문제로 끝났습니다. 그것은 다른 행동이 아닌 한 행동으로 설정되었습니다. 좌절 !!!
ajzeffer 2014 년

이로 인해 시간도 절약되었습니다. 더 이상 존재하지 않는 ViewBag 속성에 액세스하는 비슷한 문제가 있었지만 'NULL 참조에서 런타임 바인딩을 수행 할 수 없습니다'라는 오류로 인해 코드의 관련없는 부분에서 발생하는 것처럼 보입니다.
Chris Morgan

8
잠깐-오타가 무엇입니까?
Cullub 2014 년

16

이 오류 는 메서드를 호출하는 면도기 코드에 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은 올바른 줄에 오류를 표시 할 수 없습니다.

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


13

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

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

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

명심할 가치가 있습니다. :)


5

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


1

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

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

-4

세트

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

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


1
어, 뭐? 컨트롤러의 속성은보기에서 액세스 할 수 없습니다하는 ViewBag 및 / 또는 뷰 모델 ...이 이유의
토마스 레베

2
컬렉션 이니셜 라이저를 사용하는 데 전혀 문제가 없습니다. 이것은 문제를 해결하지 못합니다.
David L
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.