我有一個頁面,我已經建立了動態生成用戶控件。例如,用戶控件有兩個可以編輯的字段:SomeId和SomeData。我希望能夠根據UserControlObject
設置這些值。之後,當我讀取控件時,我希望能夠從控件中返回UserControlObject
,並將數據庫值設置爲該值。我有一些麻煩讓值保持最新。動態用戶控件獲取和維護髮布後的值
//Page
public class SomePage
{
private List<MyUserControl> _MyUserControls;
private void InitControls()
{
var controlsToBuild = SomeDatabaseCallToGetControlObjects();
foreach(MyUserControl control in controlsToBuild)
{
MyUserControl control = this.Page.LoadControl("MyControl.ascx") as MyUserControl;
UserControlPlaceHolder.Controls.Add(myControl);
_MyUserControls.Add(myControl);
}
}
protected void Page_Init(object sender, EventArgs e)
{
InitControls();
}
protected void SaveButton_Click(object sender, EventArgs e)
{
if (this.IsValid)
{
List<MyUserObject>listObj = new List<MyUserObject>();
foreach(MyUserControl control in _MyUserControls)
{
MyUserObject obj = control.GetObjectFromControl();
listObjs.Add(obj);
}
SaveToDatabase(listObjs);
//Clear placeholder in case number of controls has changed based on the save
UserControlPlaceHolder.Clear();
InitControls();
GetObjectFromDatabase();
}
}
}
//Object to put in control
public class UserControlObject
{
public string DataForUser { get;set;}
public double MoreDataForUser { get;set;}
public int HiddenIdFromUser { get; set;}
}
//User control
public class MyUserControl : UserControl
{
public MyUserControlObject GetObjectFromControl()
{
UserControlObject obj = new UserControlObject();
obj.DataForUser = textBoxOnTheControl.Text;
obj.MoreDataForUser = anotherBoxOnTheControl.Text;
obj.HiddenIdFromUser = hiddenField.Value;
return obj;
}
public void SetUserControlObject(UserControlObject obj)
{
textBoxOnTheControl.Text = obj.DataForUser;
anotherBoxOnTheControl.Text = obj.MoreDataForUser;
hiddenField.Value = obj.HiddenIdFromUser;
}
}
基本上,我想加載每個MyUserControl
與來自數據庫的值。用戶應該能夠改變大部分(但不是全部)這些字段。用戶不應該能夠更改ID,但我需要它來更新數據庫中的記錄。
我在收集信息以保存並正確保存時遇到了一些麻煩,因爲我正在重新創建MyUserControl
的集合。它似乎在初始回發上運行良好,但在接下來的回發之後,我仍然獲得其中一個字段的舊值。如何確保:
1)信息正確設置到用戶控件。我是否需要在的每個屬性UserControl上放置一個引用視圖狀態的公共屬性?
2)點擊保存事件後,回發後,重建控件不會導致我保留初始加載的任何「舊」值?我應該如何處理視圖狀態?我希望數據能夠反映用戶的變化。
我想跟着你的代碼有一些問題,使它很難遵循。在'InitControls()'你有一個'foreach'循環,但是我認爲你打算做一個簡單的循環,不是嗎?即'for(int i = 0; i
2011-03-25 04:38:14
@Joel:這是一個漫長的一天......我已經做出了更正:) – 2011-03-25 05:01:50