Подход, который вы ищете, это какой-то механизм привязки данных, который связывает значения объекта (вы можете загрузить из БД, если он уже существует) с вашей веб-формой asp.net.
В основном у вас будет следующее:
- Вы отображаете пустую веб-форму с полями (т.е. текстовыми полями) для свойств вашего объекта
- Пользователь заполнит форму и нажмет сохранить
- Тогда произойдет обратная передача. В PageLoad вы можете определить, является ли это постбэком с
Page.IsPostback
, и если это так, вы создаете новый объект и заполняете его значениями, введенными пользователем.
- В 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 передается клиенту и обратно каждый раз, когда происходит «обратная передача». Если это единственная возможность и вы испытываете проблемы с производительностью, вы можете попробовать это (но это должно быть исключением !!)
- Хранение объектов в вашем сеансе может создать нагрузку на стороне сервера, занимая там память. Вы должны быть осторожны при хранении объектов во время сеанса и, возможно, также заботиться об уничтожении этих объектов, если знаете, что они вам больше не нужны.
Преимущество подхода «привязки данных», который я описал, состоит в том, что у вас нет этих проблем, с «недостатком» наличия нового свежего объекта каждый раз. Поэтому вам нужно позаботиться о том, чтобы обрабатывать состояние вашего объекта, то есть вручную сохранять идентификаторы в обходах и т. Д.