с использованием: MVC 4, ASP.NET Razor
Я получаю сообщение об ошибке, которое, похоже, недопустимо. Он сообщает мне, что я использую нулевую ссылку, состояния, но явно она устанавливается.
Контроллер:
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)
c#
asp.net
asp.net-mvc
razor
генеральный кодировщик
источник
источник
Index()
метод и представление и посмотрите, поможет ли это понять, что не так.Ответы:
Найдено решение: на мой взгляд, у меня была опечатка, ViewBag.Typo <- это вызвало ошибку, но отладчик поместил исключение в несоответствующее место.
источник
Эта ошибка возникает, когда у вас есть ViewBag Non-Existent в вашем коде бритвы, вызывающем метод.
Контроллер
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 не может показать ошибку в правильной строке.
Обычно это приводит к потере времени.
источник
Это исключение также возникает, когда несуществующее свойство обновляется динамически с использованием отражения.
Если вы используете отражение для динамического обновления значений свойств, стоит проверить, чтобы переданное было
PropertyName
идентично фактическому свойству.В моем случае я пытался обновить
Employee.firstName
, но свойство было на самом делеEmployee.FirstName
.Стоит иметь в виду. :)
источник
Мое решение этой ошибки заключалось в том, что я скопировал и вставил из другого проекта, в котором была ссылка на
@Model.Id
. У этой конкретной страницы не было модели, но строка ошибки была так далека от фактической ошибки, которую я почти никогда не обнаружил!источник
Вы должны определить состояния, не равные нулю.
@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>()
как свойство вне функции и внутри функции вставьте записи, он должен работать.
источник