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&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" />
<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();
}
}