3

現在、データを表示するために 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")%>単一のレコードを返すときに、ページでを使用するにはどうすればよいでしょうか?

プレゼンター

    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ページ

<asp:FormView  ID="fvJob" runat="server">
     <ItemTemplate>
        <%#Eval("Title")%>
     </ItemTemplate>
</asp:FormView>
4

2 に答える 2

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; }
}
于 2013-02-22T00:45:41.320 に答える
0

DetailsView にはリストが必要ですか?! とにかく、 ctx.Jobs.SingleOrDefault(j => j.ID == id).ToList() を使用しないのはなぜですか?

于 2013-02-22T00:40:55.033 に答える