Быстрое поискать в Html.DropDownList, кажется, указывает на то, что это ASP.Net MVC - это правильно?
Если вы используете MVC, я удивлен, что вы сделали так далеко, что отображали данные базы данных на экране, не имея представления, где вы можете отфильтровать эти данные.Возможно, вы все до сих пор генерировали?
Я не очень много использовал MVC, а просто собрал быстрый и грязный пример в Visual Studio.Вы должны увидеть две папки, одну с именем Views, а другую с именем Controllers.
В папке Views должен быть файл представления, в котором находится предоставленная вами разметка.
В папке Controllers должен быть файл контроллера для вашего представления, который будет классом с содержимым, выглядящим примерно так:
namespace MvcApplication1.Controllers
{
[HandleError]
public class YourController : Controller
{
public ActionResult YourView()
{
ViewData["FORMER_BORROWER"] = new SelectList(db.Borrowers.ToList, "BorrowerID, "Name");
return View();
}
}
}
Бит кода, который связывает элемент управления DropDownListэто строка: ViewData ["FORMER_BORROWER"] = ...
Теперь в этом SelectList первым параметром является просто IEnumerable (в моем случае доступ к базе данных), поэтому вы можете использовать LINQ для фильтрации этого объекта.
Ниже приведен тривиальный пример, когда IEnumerable, который я предоставляю, создает в коде, но код, который обращается к вашей базе данных, можно использовать аналогичным образом.Не то, как я использую объединение, чтобы дать только необходимые значения.
List<SelectListItem> items = new List<SelectListItem>();
items.Add(new SelectListItem { Text = "Swimming", Value = "1" });
items.Add(new SelectListItem { Text = "Cycling", Value = "2", Selected = true });
items.Add(new SelectListItem { Text = "Running", Value = "3" });
List<ExerciseType> et = new List<ExerciseType>();
et.Add(new ExerciseType{Id="1"});
et.Add(new ExerciseType{Id="2"});
// the line below uses LINQ to filter out the item with text of "Swimming"
var filteredList = from x in items
join y in et on x.Value equals y.Id
where x.Text != "Swimming"
select x;
ViewData["Testing"] = new SelectList(filteredList, "Value", "Text");
Приведенный выше код теперь будет отображать только один элемент в DDL - элемент Cycling из-за объединения и где.
Взяв код контроллера, вы получите что-то похожее на приведенный ниже код (фокусируясь только на одной половине поля FORMER_BORROWER, если / else)
FormerBorrower = Request.Form["FORMER_BORROWER"];
ViewData["FORMER_BORROWER"] = new SelectList((
from n in _db.Loans
join x in _db.ActionPlans on n.BorrowerId equals x.BorrowerId
where (n.FORMER_BORROWER_NAME != null)
select new { n.FORMER_BORROWER_NAME, FORMER_BORROWER_NAMEID = n.FORMER_BORROWER_NAME }).Distinct().ToList(),
"FORMER_BORROWER_NAMEID",
"FORMER_BORROWER_NAME", FormerBorrower);
predicate = predicate.And(p => p.Loan.FORMER_BORROWER_NAME == FormerBorrower);
Один комментарий к ответу выше - это покабудет работать, я бы лично посмотрел на настройку дизайна, создание какого-то сервиса для вызова контроллера, абстрагирование некоторой логики доступа к данным.В идеале у вас теперь должен быть ObjectContext вверх на уровне контроллера, но вниз на уровне сервиса, что дает более сфокусированный контроллер, который не пытается управлять представлением в то же время, что и доступ к уровню данных.