RadioButtonFor в EditorTemplate не выбирает радиобутер [дубликат]

Ну, простыми словами:

Вы пытаетесь получить доступ к объекту, который не создан или в настоящее время не находится в памяти.

Итак, как это решить:

  1. Отладить и отпустить отладчик ... Он сразу приведет вас к переменной, которая сломана ... Теперь ваша задача - просто исправить это. Используя новое ключевое слово в соответствующем месте.
  2. Если это вызвано некоторыми командами базы данных, потому что объект отсутствует, все, что вам нужно сделать, это выполнить нулевую проверку и обработать его:
    if (i == null) {
        // Handle this
    }
    
  3. Самый сложный. если GC уже собрал объект ... Это обычно происходит, если вы пытаетесь найти объект, используя строки ... То есть, найдя его по имени объекта, может случиться, что GC, возможно, уже очистил его ... Это трудно найти и станет проблемой. Лучшим способом решения этой проблемы является выполнение нулевых проверок везде, где это необходимо в процессе разработки. Это сэкономит вам много времени.

Поиск по имени означает, что некоторые фреймворки позволяют использовать FIndObjects с помощью строк, а код может выглядеть так: FindObject («ObjectName»);

5
задан Daniel Liuzzi 2 December 2011 в 16:00
поделиться

2 ответа

Я знаю, что это уродливо, но может работать следующее:

@model string
@Html.RadioButton("", "F", Model == "F") Female
@Html.RadioButton("", "M", Model == "M") Male

Проблема с помощником RadioButton заключается в том, что если первый аргумент пуст или пуст, он всегда будет считать его незавершенным, тем самым делая это хелпер не подходит для шаблонов редактора.

Вот выдержка из исходного кода MVC, которая иллюстрирует, что я имею в виду:

bool isChecked = !string.IsNullOrEmpty(name) && string.Equals(htmlHelper.EvalString(name), b, StringComparison.OrdinalIgnoreCase);

. В качестве альтернативы вы могли бы использовать пользовательский HTML-помощник для создания списка переключателей.

9
ответ дан Community 25 August 2018 в 18:09
поделиться

Я принял эту идею и расширил ее. Я передаю List<Dictionary<string,string>> в мой шаблон редактора, добавленный ViewData, который я использую для создания переключателей. Мой шаблон выглядит так

@model string
@{
    var buttons = (List<Dictionary<string, string>>)ViewData["Buttons"];
}
@foreach (var button in buttons) {
    <label class="radio inline">
        @Html.RadioButton(Html.NameForModel().ToHtmlString(), Model, Model == button["Value"], new { id = Html.IdForModel() }) @button["Label"]
    </label>
}

, это то, что я перехожу к моему EditorFor в качестве дополнительного ViewData

new { Buttons = new List<Dictionary<string, string>> { new Dictionary<string, string> { { "Label", "Commercial" }, { "Value", "Y" } }, new Dictionary<string, string> { { "Label", "Residential" }, { "Value", "N" } } } }

Предоставленный я мог бы добавить это в ViewModel тип и передать это в представление с моего контроллера, однако это было быстрее сделать в файле cshtml.

0
ответ дан davidbitton 25 August 2018 в 18:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: