Ну, простыми словами:
Вы пытаетесь получить доступ к объекту, который не создан или в настоящее время не находится в памяти.
Итак, как это решить:
if (i == null) {
// Handle this
}
Поиск по имени означает, что некоторые фреймворки позволяют использовать FIndObjects с помощью строк, а код может выглядеть так: FindObject («ObjectName»);
Я знаю, что это уродливо, но может работать следующее:
@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-помощник для создания списка переключателей.
Я принял эту идею и расширил ее. Я передаю 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
.