У меня есть представление индекса (списка) в MVC5, которое заполняется из модели (таблица ICS_Supplies).
Я добавил текстовое поле для добавления фильтра поиска для пользователей в поле ItemDescription (varchar).Это прекрасно работает следующим образом:
Вид
<form asp-controller="Movies" asp-action="Index">
<p>
Search Supplies: <input type="text" name="SearchString">
<input type="submit" value="Filter" />
</p>
</form>
Контроллер
public ActionResult Index(string searchString, string SType, int? page, string YourRadioButton)
{
// Add SearchBox Filter
var catalogs = supplies.Where(s => s.ItemDescription.Contains(searchString ?? string.Empty));
// Add paging to the search results
var pageNumber = page ?? 1;
return View(catalogs.ToPagedList(pageNumber, 10));
}
Это прекрасно работает.Если searchString имеет значение null, он возвращает ВСЕ результаты.Если searchSring имеет значение, он возвращает любые результаты, когда ItemDescription Cotain значение searchString.
Я пытаюсь добавить радиокнопку в индексное представление, чтобы пользователь также мог фильтровать поле InvType, котороеполе char (1).Это может быть F (для форм) или S (для припасов).Итак, я установил значение YourRadioButton в F или S в зависимости от того, какой из них выбран.,,следующим образом (с новым кодом)
Индекс
<form asp-controller="Movies" asp-action="Index">
<div>
Supplies: @Html.RadioButton("YourRadioButton", "S")
Forms: @Html.RadioButton("YourRadioButton", "F")
</div>
<p>
Search Supplies: <input type="text" name="SearchString">
<input type="submit" value="Filter" />
</p>
</form>
И я обновляю Контроллер дополнительным кодом следующим образом:
public ActionResult Index(string searchString, string SType, int? page, string YourRadioButton)
{
var supplies = db.ICS_Supplies.OrderBy(g => g.ItemDescription).ToList();
//var supplies2 = supplies.Where(s => s.InvType.Equals(mychoice));
var supplies2 = supplies.Where(s => s.InvType.Contains(YourRadioButton ?? string.Empty));
// Add SearchBox Filter
var catalogs = supplies2.Where(s => s.ItemDescription.Contains(searchString ?? string.Empty));
// Add paging to the search results
var pageNumber = page ?? 1;
return View(supplies2.ToPagedList(pageNumber, 10));
}
Теперь я получаю следующееошибка
System.NullReferenceException
И это относится к следующей строке кода (которую я добавил)
var supplies2 = supplies.Where(s => s.InvType.Contains(YourRadioButton ?? string.Empty));
Мои вопросы.,,Почему это исключает NullReferenceException, но другая строка прекрасно работает, если она пуста?И как мне решить проблему - или есть лучший способ добавить этот второй фильтр в мой код?
Эта строка работает нормально, ноль или нет.Они оба идентичны в том, как они написаны, за исключением того, что используется значение YourRadioButton вместо searchString, и я использую поле InvType вместо ItemDescription.
var catalogs = supplies2.Where(s => s.ItemDescription.Contains(searchString ?? string.Empty));
Имейте в виду, что я ОЧЕНЬ новичок в MVC5 и C #, и поэтому объясняю, почему это сильно помогло бы мне прогрессировать.
Похоже, что информации об использовании радиокнопок в MVC5 не так много.,,довольно простая концепция в старых формах Asp.net.