Рабочий процесс и обратная связь дизайн на форме добавления / редактирования


Я ищу советы, отзывы и информация на лучшие практики при разработке веб ASP.NET форм .Net веб-приложения.

Позвольте мне опубликовать пример того, как в настоящее время я делаю вещи. Я опускаю страницу aspx, как только есть 2 TextBox и кнопка. PersonEntity проверяет, загружает и сохраняет в этом примере. В реальном мире будет иметь "лицо" бизнес-объект, который сохраняет, загружает.

Файл отделенного кода в "Добавить / редактировать" страницы:

public partial class PersonAddUpdate : System.Web.UI.Page
{
    public int PersonId 
    {
        get
        {
            int _personId = 0;
            if (Int32.TryParse(Request.QueryString["id"], out _personId))
            {
                return _personId;
            }
            else
            {
                return 0;
            }
        }
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            if (PersonId != 0)
            {
                var person = GetPersonById(PersonId);

                if (person != null)
                {
                    BindFormToData(person);
                    ViewState.Add("PersonEntity", person);
                }
            }                
        }
    }

    protected bool BindDataToForm(PersonEntity person)
    {
        person.FirstName = txtFirstName.Text;
        person.Lastname = txtLastName.Text;

        ViewState.Add("PersonEntity", person);

        // internal entity validation
        return person.Validate();
    }

    protected void BindFormToData(PersonEntity person)
    {
        txtFirstName.Text = person.FirstName;
        txtLastName.Text = person.Lastname;
    }

    protected PersonEntity GetPersonById(int personId)
    {
        PersonEntity person = new PersonEntity();
        return person.LoadById(personId);
    }

    protected void btnSave_Click(object sender, EventArgs e)
    {
        if (!Page.IsValid)
        {
            return;
        }

        PersonEntity person;

        if (ViewState["PersonEntity"] == null)
        {
            person = new PersonEntity();
        }
        else
        {
            person = (PersonEntity)ViewState["PersonEntity"];
        }

        if (!BindDataToForm(person))
        {
            // failed entity validation
            return;
        }

        if (!person.Save())
        {
            // problem saving
            return;
        }
        else
        {
            Response.Redirect("PersonDetail.aspx?id=" + person.Id.ToString());
        }
    }
}

Рабочий процесс:

Загрузки Страницы: Получить идентификатор из строки запроса. Если возникает проблема, вернуть 0. Никаких записей в системе есть "0" идентификатор. Попробуйте загрузить данные. Если есть данные, установить значения форма и добавить ее в состояние представления.

Сохранить: стоп, если страница является недействительной. Создать неинициализированный PersonEntity. Если ViewState содержит объект, затем форма привязки (получает значения форма) обычные не нужны новые PersonEntity. Если ViewState в нуль, то мы имеем новый рекорд.

Звоните BindDataToForm, который получает значения полей формы и возвращает false, если это не внутренняя сущность проверки. Попытка сохранить и продолжить, если ОК.

Вопросы:

Я использую этот шаблон для некоторое время теперь. Вы видите все, что я могу сделать, чтобы улучшить его? Я пытался найти образцы полной формы, которые обрабатывают добавить / изменить, но я не смог найти те, которые работали так хорошо, как это с ОРМ-сгенерированный код.

Любые замечания, советы, идеи или вопросы?

Я надеюсь, код простым для чтения и понимания.



469
6
задан 23 августа 2011 в 03:08 Источник Поделиться
Комментарии
1 ответ

Это мой отзыв, пожалуйста, дайте мне знать, если я неправильно истолковал :

1) хранить весь объект PersonEntity в ViewState В будут иметь следующие проблемы


  • Это сделает отображение тяжелых и таким образом сделать загрузку страницы более медленной.

  • Он может не отражать текущее состояние объекта.

Вы можете хранить personId, воссоздать объект personentity, а затем вызвать "сохранить".
Намного больше о отображение здесь http://www.freshegg.com/blog/creating-lean-fast-web-pages-view-state_3377

2) Вы можете сделать метод статическим LoadById

2
ответ дан 3 октября 2011 в 01:10 Источник Поделиться