사용 : 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>()
함수 외부의 속성으로 함수 내부에 항목을 삽입하면 작동합니다.