1

FormView の動的に読み込まれたテンプレートで [挿入] ボタンをクリックすると、次のエラーが発生します。デフォルトのフォーム モードは挿入に設定されています。挿入テンプレートの読み込みは問題ありません。タイプを修正するために TypeName="WebApplication1.Repository.AccountRepo" と DataObjectTypeName="WebApplication1.Model.Account" があります。誰か助けてください。

私が得るエラーは ObjectDataSource 'ObjectDataSource1' has no values to insert. 'values' ディクショナリに値が含まれていることを確認してください。

    <asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
        <h2>
            Welcome to ASP.NET!
        </h2>
        <p>
            To learn more about ASP.NET visit <a href="http://www.asp.net" title="ASP.NET Website">
                www.asp.net</a>.
        </p>
        <p>
            You can also find <a href="http://go.microsoft.com/fwlink/?LinkID=152368&amp;clcid=0x409"
                title="MSDN ASP.NET Docs">documentation on ASP.NET at MSDN</a>.
            <uc1:WebUserControl1 ID="WebUserControl11" runat="server" />
        </p>
        <asp:FormView ID="FormView1" runat="server" DataSourceID="ObjectDataSource1"
            OnLoad="FormView1_Load" OnModeChanged="FormView1_ModeChanged" 
            oninit="FormView1_Init" ViewStateMode="Enabled"  DefaultMode="Insert">

        </asp:FormView>
        <asp:ObjectDataSource ID="ObjectDataSource1" runat="server" DataObjectTypeName="WebApplication1.Model.Account"
            DeleteMethod="Delete"  SelectMethod="Select" TypeName="WebApplication1.Repository.AccountRepo"
            UpdateMethod="Update" oninserting="ObjectDataSource1_Inserting"
            InsertMethod="Insert">
            <InsertParameters>
                <asp:Parameter Name="acct" Type="Object" />
            </InsertParameters>
            <UpdateParameters>
                <asp:Parameter Name="acct" Type="Object"/>
            </UpdateParameters>
        </asp:ObjectDataSource>
    </asp:Content>

ページ初期化メソッドの次のコード

    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Init(object sender, EventArgs e)
        {
            //ITemplate control = Page.LoadTemplate("~/WebUserControl2.ascx");
            FormView1.EditItemTemplate = Page.LoadTemplate("~/WebUserControl2.ascx");
            FormView1.InsertItemTemplate = Page.LoadTemplate("~/WebUserControl2.ascx");
            FormView1.ItemTemplate = Page.LoadTemplate("~/WebUserControl2.ascx");

        }
    }

WebUserControl2.ascx に次の HTML フラグメントがあります

    <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="WebUserControl2.ascx.cs"
        Inherits="WebApplication1.WebUserControl2" ViewStateMode="Enabled" %>
    Name:
    <asp:TextBox ID="NameTextBox" runat="server" Text='<%# Bind("Name") %>' />
    <br />
    Address:
    <asp:TextBox ID="AddressTextBox" runat="server" Text='<%# Bind("Address") %>' />
    <br />

    <asp:LinkButton ID="InsertButton" runat="server" CausesValidation="True" CommandName="Insert"
        Text="Insert" />
    &nbsp;
    <asp:LinkButton ID="InsertCancelButton" runat="server" CausesValidation="False"
        CommandName="Cancel" Text="Cancel" />

これは、ObjectDataSource1 に設定されたビジネス クラスであるサンプル リポジトリ クラスです。

    public class AccountRepo
    {
        private static Model.Account _account;
        public void Delete(Model.Account acct)
        {
            _account = new Model.Account();
        }

        public Model.Account Update(Model.Account acct)
        {
            _account = acct;
            return _account;
        }

        public Model.Account Insert(Model.Account acct)
        {
            _account = new Model.Account() { Name = "new" };
            return _account;
        }

        public Model.Account Select()
        {
            if (_account == null)
                _account = new Model.Account() { Name = "BrandNew" };

            return _account;
        }

    }

これはアカウントクラスです

    public class Account
    {
        public string Name { get; set; }
        public string Address {get;set;}

        public static Account CreateAccount(){
            return new Account();
        }

    }
4

1 に答える 1

0

このページで解決策を見つけました。著者が提案することを実行すると、うまくいきます。 http://www.developerfusion.com/code/4721/dynamically-loading-an-ibindabletemplate/

于 2013-02-27T20:25:57.683 に答える