我们目前在aspx页面中使用asp:Repeater
和<%#Eval("SomeField")%>
来显示数据。
我们想使用单个记录并将其绑定到aspx页面上的asp.net控件,这样我们就可以<%#Eval("SomeField")%>
。
我尝试了FormView
,DetailsView
和其他asp.net控件。所有这些都需要.ToList()
或IEnumerable
。但是,我们将返回ctx.Jobs.SingleOrDefault(j => j.ID == id);
我们不想使用asp:Label或asp:Literal ..
返回单个记录时,如何在页面中使用<%#Eval("SomeField")%>
?
PRESENTER
public static Job GetByID(int id) { using (var ctx= new CareersEntities()) { return ctx.Jobs.SingleOrDefault(j => j.ID == id); } }
代码隐藏
protected void Page_Load(object sender, EventArgs e)
{
Job d = new Job();
d = JobPresenter.GetByID(ID);
fvJob.DataSource = d;
fvJob.DataBind();
}
ASPX PAGE
<asp:FormView ID="fvJob" runat="server"> <ItemTemplate> <%#Eval("Title")%> </ItemTemplate> </asp:FormView>
答案 0 :(得分:2)
DetailsView
和FormView
如果使用数据源控件(例如ObjectDataSource),则可以使用单个对象。使用ObjectDataSource,您可以从Select方法返回单个元素,然后数据源将其包含在列表中仅仅是为了编程接口 - 但它不是您所见过的。
如果要直接设置控件的DataSource属性并调用DataBind,只需将对象包装在一个数组中,然后将其传入。
这是DetailsView:
<asp:DetailsView runat="server" ID="DetailsView1" AutoGenerateRows="false">
<Fields>
<asp:TemplateField HeaderText="First name:">
<ItemTemplate><%# Eval("FirstName") %></ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Last name:">
<ItemTemplate><%# Eval("LastName") %></ItemTemplate>
</asp:TemplateField>
</Fields>
</asp:DetailsView>
这是Page_Load中的DetailsView绑定代码:
var person = new Person { FirstName = "John", LastName = "Doe" };
DetailsView1.DataSource = new object[] { person };
DetailsView1.DataBind();
或者这是一个FormView:
<asp:FormView runat="server" ID="FormView1">
<ItemTemplate>
First name: <%# Eval("FirstName") %><br />
Last name: <%# Eval("LastName") %><br />
</ItemTemplate>
</asp:FormView>
这是Page_Load代码:
var person = new Person { FirstName = "John", LastName = "Doe" };
FormView1.DataSource = new object[] { person };
FormView1.DataBind();
这是模型类型(在DetailsView和FormView中都相同):
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
答案 1 :(得分:0)
DetailsView需要一个列表吗?!无论如何,为什么不使用ctx.Jobs.SingleOrDefault(j =&gt; j.ID == id).ToList()?