저는 ASPX 페이지를 끌어다 놓는 것과 같은 끌어다 놓기 등의 작업을하지 않습니다. 하나의 Default.aspx로 포털을 구축하고 있으며 다른 모든 것들은 다른 개발자가 컴파일 된 dll로 빌드 할 수있는 사용자 정의 웹 파트 컨트롤 또는 서버 컨트롤이며 사용자는 포털에 기능을 추가하기 위해 자체 포털에 업로드 할 수 있습니다. 나는 entitydatasource를 사용하여 DetailsView crud 작업과 싸워 왔습니다. 드래그 앤 드롭으로 test.aspx 페이지를 만들었고 모든 것이 잘 작동했지만 100 % 코드 뒤에는 아무 것도 없습니다. 오류는 표시되지 않지만 데이터는 데이터베이스에 보존되지 않습니다. detailsview의 onUpdating 이벤트를 잡으려고 시도했지만 예기치 않게 이벤트가 발생하여 제출 된 데이터를 열거 할 수 있었지만 데이터베이스에 저장되지 않은 이유는 무엇입니까? 누군가가 이걸 도울 수 있기를 바랍니다. 나는 당신이 무엇을해야 생각사용자 정의 서버 컨트롤의 DetailsView 및 EntityDataSource를 사용한 CRUD
public partial class Test : System.Web.UI.Page
{
private EntityDataSource eds = new EntityDataSource();
public DetailsView dtlview = new DetailsView();
protected void Page_Load(object sender, EventArgs e)
{
//Initialize Datasource
eds.ConnectionString = "name=DBEntities";
eds.DefaultContainerName = "DBEntities";
eds.EnableDelete = true;
eds.EnableFlattening = false;
eds.EnableInsert = true;
eds.EnableUpdate = true;
eds.EntitySetName = "EmailAccounts";
Controls.Add(eds);//I don't know if this is necessary
//Create DetailsView and configure for inserting on default
dtlview.DataSource = eds;
dtlview.AutoGenerateInsertButton = true;
dtlview.AutoGenerateDeleteButton = true;
dtlview.AutoGenerateEditButton = true;
dtlview.AutoGenerateRows = false;
dtlview.DefaultMode = DetailsViewMode.Insert;
dtlview.AllowPaging = true;
dtlview.DataKeyNames = new string[] { "ID" };
dtlview.AllowPaging = true;
//Create fields since autogeneraterows is false
BoundField bfID = new BoundField();
bfID.DataField = "ID";
bfID.HeaderText = "ID:";
BoundField bfUserID = new BoundField();
bfUserID.DataField = "UserID";
bfUserID.HeaderText = "User ID:";
BoundField bfDisplayName = new BoundField();
bfDisplayName.DataField = "DisplayName";
bfDisplayName.HeaderText = "Display Name:";
BoundField bfEmailAddress = new BoundField();
bfEmailAddress.DataField = "EmailAddress";
bfEmailAddress.HeaderText = "Email:";
BoundField bfPassword = new BoundField();
bfPassword.DataField = "Password";
bfPassword.HeaderText = "Password:";
BoundField bfOutgoingServer = new BoundField();
bfOutgoingServer.DataField = "OutgoingServer";
bfOutgoingServer.HeaderText = "Outgoing server:";
BoundField bfIncomingServer = new BoundField();
bfIncomingServer.DataField = "IncomingServer";
bfIncomingServer.HeaderText = "Incoming Server:";
CheckBoxField chkfIsDefault = new CheckBoxField();
chkfIsDefault.DataField = "IsDefault";
chkfIsDefault.HeaderText = "Is Default?";
dtlview.Fields.Add(bfID);
dtlview.Fields.Add(bfUserID);
dtlview.Fields.Add(bfDisplayName);
dtlview.Fields.Add(bfEmailAddress);
dtlview.Fields.Add(bfPassword);
dtlview.Fields.Add(bfOutgoingServer);
dtlview.Fields.Add(bfIncomingServer);
dtlview.Fields.Add(chkfIsDefault);
dtlview.DataBind();
//Events handling for detailsview
dtlview.ItemInserting += dtlview_ItemInserting;
dtlview.ItemInserted += dtlview_ItemInserted;
dtlview.ModeChanging += dtlview_ModeChanging;
//Add controls to place holder
PlaceHolder2.Controls.Add(dtlview);
}
protected void dtlview_ItemInserting(object sender, DetailsViewInsertEventArgs e)
{
e.Values["UserID"] = GetCurrentUserID();
}
protected void dtlview_ItemInserted(object sender, DetailsViewInsertedEventArgs e)
{
}
protected void dtlview_ModeChanging(object sender, DetailsViewModeEventArgs e)
{
dtlview.ChangeMode(e.NewMode);
if (e.NewMode != DetailsViewMode.Insert)
{
dtlview.DataSource = eds;
dtlview.DataBind();
}
}
}
감사 세바스티안 (또한 페이지 요청 당 하나의 개체 컨텍스트를 검색),이 시도하고 내 경험을 게시 할 수 있습니다. – Steven
Sebastian에게 감사의 말을 전합니다. 이것은 제가 물어 본 질문과 프로젝트의 다른 영역에서 매우 도움이되었습니다. – Steven