Podejście szukasz jest pewnego rodzaju mechanizm wiązania z danymi, który wiąże wartości obiektu (można załadować z db, jeśli już istnieje) do formularza internetowego asp.net.
Zasadniczo trzeba było następujące:
- wyświetlać pustego formularza internetowego z pól tekstowych (tj) do swojej właściwości obiektu
- Użytkownik wypełni formularz i naciśnij przycisk Zapisz
- Wówczas nastąpi odświeżenie. Na stronie PageLoad można wykryć, czy jest to odświeżenie z
Page.IsPostback
, a jeśli tak, to utworzyć nowy obiekt i wypełnić go wartościami wprowadzonymi przez użytkownika.
- W OnClick swojej przycisku wywołać odpowiednią metodę BL do przechowywania go w dół do DB
Wygląda to następująco (piszę to z mojej głowy bez kompilatora, więc zadbać :))
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
}
}
chciałem dodać wczoraj, ale zapomniał, ponieważ musiałem się spieszyć:
można również przechowywać swoje obiekty w ViewState lub sesji jak opisano inne, ale mam doświadczenie, które powinno zrobić tak rzadko, jak to możliwe, z powodu następujących "wad" (z mojego punktu widzenia):
- Twoje obiekty muszą być serializable
- Przechowywanie w ViewState będzie drammatically zwiększyć wielkość swojej stronie, a tym samym spowalnia ładowanie strony. Zauważ, że parametr ViewState jest przesyłany do klienta i z powrotem za każdym razem, gdy występuje "odświeżenie". Jeśli jest to jedyna możliwość i występują problemy z wydajnością, możesz wziąć pod uwagę trying this (ale to powinno być wyjątkiem!)
- Przechowywanie obiektów w sesji może spowodować obciążenie po stronie serwera, zużywając tam pamięć. Powinieneś być ostrożny w przechowywaniu obiektów w swojej sesji i być może także dbać o zniszczenie tych obiektów, jeśli wiesz, że ich już nie potrzebujesz.
Zaletą opisywanego przeze mnie "wiązania danych" jest to, że nie występują takie problemy z "wadą" posiadania nowego świeżego obiektu za każdym razem. W związku z tym należy zadbać o obsługę stanu obiektu, tj. Ręczne przechowywanie identyfikatorów przez obie wizyty itd.