ASP.NET: Как я могу поддержать объекты между обратными передачами?

кто-либо может обеспечить некоторое понимание относительно того, почему это?

Да, это - чрезвычайно сложный стандарт, который позволяет много материала, который никто действительно не использует сегодня.:)

там кто-либо известные и доказанные regexps, которые на самом деле делают это полностью?

Вот одна попытка проанализировать целый стандарт полностью...

http://ex-parrot.com/~pdw/Mail-RFC822-Address.html

, Каковы некоторые хорошие альтернативы использованию regexps для соответствия адресам электронной почты?

Используя существующую платформу для него на любом языке, который Вы используете, я предполагаю? Хотя те будут, вероятно, использовать regexp внутренне. Это - сложная строка. Regexps разработаны для парсинга сложных строк, так, чтобы действительно был лучший выбор.

Редактирование : Я должен добавить, что regexp, с которым я связался, был только для забавы. Я не подтверждаю использование комплекса regexp как этот - некоторые люди говорят, что, "если Ваш regexp является больше чем одной строкой, это, как гарантируют, будет иметь ошибку в нем где-нибудь". Я связался с ним, чтобы проиллюстрировать, насколько сложный стандарт.

9
задан Shyju 19 September 2009 в 10:43
поделиться

4 ответа

Подход, который вы ищете, представляет собой некий механизм привязки данных, который связывает значения объекта (вы можете загрузить из базы данных, если она уже существует) с вашей веб-формой asp.net.

В основном у вас будет следующее:

  1. Вы показываете пустую веб-форму с полями (т.е. текстовыми полями) для свойств вашего объекта
  2. Пользователь заполняет форму и нажимает "сохранить"
  3. Затем обратная передача будет случиться. В PageLoad вы можете определить, является ли это обратной передачей с помощью Page.IsPostback , и если да, вы создаете новый объект и заполняете его значениями, введенными пользователем.
  4. В OnClick вашей кнопки, вы вызываете соответствующий метод BL для сохранения его в БД

Это будет выглядеть так (я пишу это из головы без компилятора, поэтому будьте осторожны :))

public partial class MyPage : Page
{

    private Person myPersonObj;

    protected void Page_Load(...)
    {

        if(!Page.IsPostback)
        {
            //this is not a postback, so you may load an object based on an ID (i.e. in QueryString or create a new one
            myPersonObj = new Person();
        }
        else
        {
            //it is a postback, so unbind the values
            myPersonObj = new Person();
            Unbind(); //the myPersonObj will be filled, the values are managed by ASP.net in the ViewState
        }

    }

    //caution, overriding Page.DataBind()
    private override void DataBind()
    {
        textBoxFirstname.Text = myPersonObj.FirstName;
        ...

    }

    private void Unbind()
    {
        myPersonObj.FirstName = textBoxFirstname.Text;
    }

    protected void btnSubmit_OnClick(...)
    {
        if(Page.IsValid)
        {
            Save();
        }
    }

    private void Save()
    {
         //ideal layering with Interfaces
         IPersonBL personBL = MyBLFactory.Get<IPersonBL>();
         personBL.SavePerson(myPersonObj); //call the BL for further validation and then persisting
    }
}

То, что я хотел добавить вчера, Вы также можете хранить свои объекты в ViewState или Session, как описано другими, но я испытал, что это следует делать как можно реже из-за следующих «недостатков» (с моей точки зрения):

  • Ваши объекты нуждаются в быть сериализуемым
  • Сохранение в ViewState резко увеличит размер вашей страницы и, таким образом, замедлит загрузку вашей страницы. Обратите внимание, что ViewState передается клиенту и обратно каждый раз, когда происходит «обратная передача». Если это единственная возможность и у вас проблемы с производительностью, вы можете попробовать попробовать это (но это должно быть исключением !!)
  • Сохранение объектов в вашем сеансе может вызвать нагрузку на сервер. , потребляя там память. Вы должны быть осторожны при хранении объектов в своем сеансе и, возможно, также позаботиться об уничтожении этих объектов, если вы знаете, что они вам больше не нужны.

Преимущество подхода "привязки данных", который я описал, заключается в том, что вы этого не делаете. есть эти проблемы, с «недостатком» - каждый раз иметь новый свежий объект. Следовательно, вы должны позаботиться об управлении состоянием вашего объекта, то есть вручную сохранять идентификаторы через циклы и т. Д.

3
ответ дан 4 December 2019 в 19:35
поделиться

Другой вариант - сохранить объект в кэше с использованием уникального ключа (например, «пользователь» + идентификатор ) и сохранить его только в текущем сеансе или в ViewState. Затем во время обратной передачи вы можете получить объект из кеша.

При таком подходе у вас есть несколько преимуществ:

  • у вас меньше данных в вашем сеансе или в ViewState
  • , если обратная передача выполняется, вы только необходимо получить доступ к БД, если объекта больше нет в кеше
  • , если обратная передача не выполняется, в конечном итоге объект будет удален из кеша (освобождение памяти)
7
ответ дан 4 December 2019 в 19:35
поделиться

В пользовательском интерфейсе Сделайте это

    UserDetail userDetail = new UserDetail();
    //do your stuff
    userDetail = UserBL.TransferUserData(userDetail);

    //do your stuff

В BL

public static UserDetail TransferUserData(UserDetail userDetail )
{
    // do your processing on userDetail
    return UserDAL.TransferUserData(userDetail);
}

В DAL

public static UserDetail TransferUserData(UserDetail userDetail)
{

    //do your processing of db
    return userDetail; 
}
-1
ответ дан 4 December 2019 в 19:35
поделиться

Вы можете сохранить объект в ViewState, это будет хранилище для конкретной страницы. Затем объект будет сериализован и введен в состояние просмотра страницы, что приведет к увеличению страницы.

Сохраняя объект в сеансе, вы уменьшаете размер страницы, но потребляете ресурсы памяти сервера.

В качестве альтернативы вы можете прочитать объект. из базы данных каждый раз. Это будет иметь то преимущество, что пользователю будет отображаться именно то, что было сохранено в базе данных.

3
ответ дан 4 December 2019 в 19:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: