2013-07-26 7 views
0

ASP.NET 4.5에서 모델 바인딩을 테스트하고 있습니다.Gridview에서 모델 바인딩을 사용하여 같은 페이지에 Formview에서 새로 추가 된 항목을 표시하지 않음

사용자로부터 데이터를 받아들이고 성공적으로 저장 한 후에 아래 GridView에 데이터 목록을 표시하는 formview를 테스트했습니다. 데이터가 목록에 저장되면 그리드 뷰는 비어 있습니다.

ObjectDataSource를 사용하여이 예제를 시도했지만 올바르게 작동했습니다. 양식 데이터가 저장 될 때 포스트 백 이후에 List에있는 모든 항목이 격자보기에 표시됩니다.

모델 바인딩을 사용할 때 원하는 동작을 얻지 못하게하려면 어떻게해야합니까? 그렇다면 원하는 행동을 취하는 올바른 방법은 무엇입니까?

formview의 ASP.NET 마크 업 및

public partial class WebForm1 : System.Web.UI.Page 
{ 


    private static List<Person> people = new List<Person>(); 

    public IEnumerable<Person> GetPeople() 
    { 
     return people; 
    } 

    public void SavePerson(Person person) 
    { 
     people.Add(person); 
    } 


} 

Person 클래스 뒤에 그리드보기

<asp:FormView ID="FormView1" runat="server" DefaultMode="Insert" ItemType="WebApplication35.Person" InsertMethod="SavePerson" SelectMethod="GetPeople"> 
       <HeaderTemplate> 
        <asp:ValidationSummary ID="ValidationSummary1" runat="server" /> 

       </HeaderTemplate> 


       <InsertItemTemplate> 
        FirstName: 

        <asp:TextBox ID="FirstNameTextBox" runat="server" Text='<%# BindItem.FirstName %>' /> 
        <br /> 
        LastName: 
        <asp:TextBox ID="LastNameTextBox" runat="server" Text='<%# BindItem.LastName %>' /> 
        <br /> 
        Age: 
        <asp:TextBox ID="AgeTextBox" runat="server" Text='<%# BindItem.Age %>' /> 
        <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" /> 
       </InsertItemTemplate> 

      </asp:FormView> 
    <asp:GridView ID="GridView1" runat="server" ItemType="WebApplication35.Person" SelectMethod="GetPeople" PageSize="2"> 
    </asp:GridView> 

코드

public class Person 
{ 
    [Required] 
    public string FirstName { get; set; } 

    [Required] 
    public string LastName { get; set; } 

    [Required] 
    public int Age { get; set; } 

} 

답변

2

의 GridView 상점은 마지막 선택 viewstate가 데이터 및하지 않습니다 다시 게시 후 업데이트하십시오. 업데이트 된 결과를보고 싶다면

그래서 바로 삽입 한 후, 당신은 그리드하거나

+0

내가 viewstate가 잊어 대한 해제 viewstate가 리 바인드해야합니다. 나는 formview의 itemCreated 이벤트에서 그리드를 리바 인하기로 결정했고 완벽하게 작동합니다. – kenalex

+0

@kenalex 리바 인드를 어떻게 완성 했습니까? 나는 같은 상황에 처해있다. – Raithlin

+0

nm. DataBind()는 완벽하게 작동했지만, 확신 할 수 없었습니다. – Raithlin