Парень из MVC, пытающийся понять веб-формы asp.net (привязка данных) - PullRequest
0 голосов
/ 31 августа 2011

Меня бросили в этот проект, который использует веб-формы Asp.net.

Я пытаюсь понять, как работает привязка данных.

Предположим, я ввел данные формы, касающиеся регистрации пользователя.Когда я отправляю, могу ли я как-то связать входные данные с моделью?

Я читал о привязке к наборам данных, которые могут быть XML.Нужно ли десериализовать это какой-то сущности?

Пожалуйста, оцените любой ресурс по этому вопросу.

1 Ответ

0 голосов
/ 02 сентября 2011

Избегайте наборов данных, если можете.Вместо этого используйте строго типизированные объекты.Если вы используете наборы данных, они уже хорошо сериализуются.Вот грубый пример, чтобы помочь вам.Это будет извлекать значения из текстовых полей и привязывать представление списка к коллекции.Надеюсь, это поможет.

Шаг 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*/
    }
}

Шаг 2: Создание ViewModel в вашем коде файла (PageName.aspx.cs)

 /// <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;
            }
        }
    }

Шаг 3. Добавление разметки в ASPX

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

Шаг 4. События CodeBehind

    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();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...