我有一个ListView,我想在其中应用过滤功能。
<asp:ListView runat="server" ID="CollegeDetailsView"
DataKeyNames="CollegeID" ItemType="CollegeDataLibrary.CollegeDetail"
AutoGenerateColumns="false" ItemPlaceholderID="CollegeItem"
AllowPaging="true" AllowSorting="true"
SelectMethod="GetData" OnItemDataBound="CollegeDetailsView_ItemDataBound">
<EmptyDataTemplate>
There are no entries found for Colleges
</EmptyDataTemplate>
<LayoutTemplate>
GetData方法是:
public IQueryable<CollegeDataLibrary.CollegeDetail> GetData()
{
var context = DataOperations.GetCollegeDetails();
return context.AsQueryable();
}
我已经取了两个下拉列表,如果用户选择两个或单个值,listview将显示相应的记录。我已应用以下代码:
protected void SearchField_Click(object sender, EventArgs e)
{
string Created = DDLCreatedBy.SelectedItem.Value;
string Fdp = DDLFDP.SelectedItem.Value;
var context = DataOperations.GetFilteredData(Created, Fdp);
CollegeDetailsView.DataSource = context.ToList();
CollegeDetailsView.DataBind();
}
GetFilteredData方法是:
public List<CollegeDetail> GetFilteredData(string Created, string FDP)
{
using (CollegeDataEntities context = new CollegeDataEntities())
{
return context.CollegeDetails.Where(cs => cs.CreatedBy == Created && cs.FDP == FDP).ToList();
}
}
上下文具有确切的值,但在绑定后显示以下错误:
答案 0 :(得分:0)
您正在看到该错误,因为您尝试以两种方式绑定ListView。您正在标记中使用模型绑定方法,并在您的代码中手动设置DataSource
。
您可以尝试做的一件事是删除模型绑定并坚持手动绑定它。移除ItemType
和SelectMethod
,而只是在Page_Load或其他内容中调用GetData。
protected void Page_Load(object sender, EventArgs e)
{
CollegeDetailsView.DataSource = GetData();
CollegeDetailsView.DataBind();
}
然后您的其他过滤应该按原样运行,假设过滤设置正确。您可以尝试的另一件事显然是相反的 - 坚持模型绑定并删除所有手动绑定。这是一个asp.net article on model binding。