ASP.NET使用单个记录将DataSource绑定到整个页面

时间:2013-02-22 00:37:20

标签: asp.net data-binding web-controls

我们目前在aspx页面中使用asp:Repeater<%#Eval("SomeField")%>来显示数据。

我们想使用单个记录并将其绑定到aspx页面上的asp.net控件,这样我们就可以<%#Eval("SomeField")%>

我尝试了FormViewDetailsView和其他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>

2 个答案:

答案 0 :(得分:2)

DetailsViewFormView如果使用数据源控件(例如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()?