2013-02-27 3 views
1

동적으로로드 된 FormView 템플릿에서 삽입 단추를 클릭하면 다음 오류가 발생합니다. 기본 양식 모드는 삽입으로 설정됩니다. 삽입 템플릿이 잘로드되는 것을 볼 수 있습니다. TypeName = "WebApplication1.Repository.AccountRepo"및 DataObjectTypeName = "WebApplication1.Model.Account"를 사용하여 유형을 수정하십시오. 누군가 제발 도와 줄 수 있어요.FormView 동적 템플릿이 삽입/업데이트시 양식 값을 보내지 않음

오류는 입니다. ObjectDataSource 'ObjectDataSource1'에는 삽입 할 값이 없습니다. '값'사전에 값이 포함되어 있는지 확인하십시오.

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 조각 다음 한 페이지 init 메소드의 코드에 따라

<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> 

<%@ 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(); 
     } 

    } 
+0

"InsertParameters"에 뭔가 이상한 점이 있지만 필자는 내 손가락을 무엇에 두는 지 알고 있습니다. 코드에서 "acct"가 무엇인지 어떻게 알 수 있습니까? – jadarnel27

+0

Insert 및 Update 메서드의 매개 변수 이름입니다. – user357086

+0

그러나, 나는 WebUserControl2.ascx 내용을 가지고 에 배치한다면 \t \t \t <<- - 여기에 장소를!>! - 여기에 배치하십시오 -> \t 동적으로 템플릿을로드 할 때 formvalue 컬렉션을 만들 수없는 경우에만 오류없이 작동합니다. – user357086

답변