C# 试图理解asp.net Web表单(数据绑定)的MVC人员

C# 试图理解asp.net Web表单(数据绑定)的MVC人员,c#,webforms,C#,Webforms,我参与了这个使用Asp.net Webforms的项目 我试图理解数据绑定是如何工作的 假设我输入有关用户注册的表单数据。当我提交时,我能以某种方式将输入绑定到模型吗 我读过关于绑定到可以是XML的数据集的内容。我需要将其反序列化为某种实体吗 请提供有关这方面的任何资源。如果可以,请避免使用数据集。改用强类型对象。如果您确实使用了数据集,那么它们已经很好地序列化了。下面是一个简单的例子,可以帮助您上路。这将从文本框中提取值,并将列表视图绑定到集合。 我希望这有帮助 步骤1:创建对象和视图模型

我参与了这个使用Asp.net Webforms的项目

我试图理解数据绑定是如何工作的

假设我输入有关用户注册的表单数据。当我提交时,我能以某种方式将输入绑定到模型吗

我读过关于绑定到可以是XML的数据集的内容。我需要将其反序列化为某种实体吗


请提供有关这方面的任何资源。

如果可以,请避免使用数据集。改用强类型对象。如果您确实使用了数据集,那么它们已经很好地序列化了。下面是一个简单的例子,可以帮助您上路。这将从文本框中提取值,并将列表视图绑定到集合。 我希望这有帮助

步骤1:创建对象和视图模型

 [Serializable]
public class Person
{
    public String FirstName { get; set; }
    public String LastName { get; set; }

    public Person(String FirstName, String LastName)
    {
        this.FirstName = FirstName;
        this.LastName = LastName;
    }

    public Person()
        : this(String.Empty, String.Empty)
    {
    }
}

[Serializable]
public class ViewModelBase
{

}

[Serializable]
public class SomePageViewModel : ViewModelBase
{
    private Person currentperson;
    public Person CurrentPerson
    {
        get
        {
            if (currentperson == null)
            {
                currentperson = new Person();
            }
            return currentperson;
        }
        set
        {
            currentperson = value;
        }

    }

    private List<Person> persons;
    public List<Person> Persons
    {
        get
        {
            if (persons == null)
            {
                persons = new List<Person>();
            }
            return persons;
        }
        set
        {
            persons = value;
        }
    }
    public SomePageViewModel()
    {
    }

    public void RegisterPerson(String FirstName, String LastName)
    {
        Persons.Add(new Person(FirstName,LastName));
    }
    public void GetPersons()
    {
        /*Get Persons from database*/
    }
}

Northrup和Snell为MCTS 70-515编写的微软新闻书怎么样?他们很有趣,很有说教性。“使用Microsoft.Net Framework开发Web应用程序”。是的,您可以创建一个模型并将其存储在ViewState中,然后将其数据绑定到前端(我说是前端代码)。给我一点时间,我会找到我的旧代码,已经好几年了。我认为你不需要在这里使用session,viewstate可能更合适。Rod,你是对的,session是不需要的,viewstate可以保存数据,但是你必须记住,viewstate在每篇文章中都会被序列化/反序列化。您也不能使用viewstate在多个页面之间共享数据。也就是说,会话存储确实有它自己的缺点。这实际上取决于当时的开发人员。是的,您必须在每次请求时重新加载所需的所有数据。。。糟透了,我知道,这是一个可怕的框架。
 /// <summary>
    /// Lazy initialized and persisted in session
    /// </summary>
    public SomePageViewModel ViewModel
    {
        get
        {
            if (Session["SomePageViewModel"] == null)
            {
                Session.Add("SomePageViewModel", new SomePageViewModel());
            }
            return Session["SomePageViewModel"] as SomePageViewModel;
        }
        set
        {
            if (value == null)
            {
                if (Session["SomePageViewModel"] != null)
                {
                    Session.Remove("SomePageViewModel");
                }
            }
            else
            {
                Session["SomePageViewModel"] = value;
            }
        }
    }
   <asp:TextBox runat="server" ID="txtFirstName" ValidationGroup="vgrpRegister"  />
<asp:TextBox runat="server" ID="txtLastName" ValidationGroup="vgrpRegister" />
<asp:Button runat="server" ID="btnRegister" Text="Register"  ValidationGroup="vgrpRegister"/>

<asp:ListView runat="server" ID="lvPersons" ItemPlaceholderID="phPersons" DataSource='<%#ViewModel.Persons%>'>
    <LayoutTemplate>
        <table id="tblPersons" border="1">
            <thead>
                <tr>
                    <th>First Name</th>
                    <th>Last Name</th>
                </tr>
            </thead>
            <tbody>
                <asp:PlaceHolder runat="server" ID="phPersons"></asp:PlaceHolder>
            </tbody>
        </table>
    </LayoutTemplate>
    <ItemTemplate>
        <tr>
            <td><%#Eval("FirstName") %></td>            
            <td><%#Eval("LastName") %></td>
        </tr>
    </ItemTemplate>
</asp:ListView>
    protected void Page_Load(object sender, EventArgs e)
    {
        this.btnRegister.Click += new EventHandler(btnRegister_Click);
    }

    void btnRegister_Click(object sender, EventArgs e)
    {
        this.ViewModel.RegisterPerson(txtFirstName.Text, txtLastName.Text);
        this.lvPersons.DataBind();
    }