최근에 같은 문제가있었습니다. 동적 데이터 응용 프로그램 템플릿을 처음 사용하고 즉시 사용 가능한 기능에 깊은 인상을 받았습니다. 그러나 나는 특히 당신이 언급 한 몇 개의 세트 백을 주목했다. 내 페이지 중 일부는로드하는 데 오래 걸렸고, 외래 키 드롭 다운으로 인해 발생했음을 발견했을 때 솔루션을 찾기까지 어느 정도 시간이 걸렸습니다. 문제는이 행동이 웹 사이트의 내부 작동에 필수적이라는 것입니다. 이러한 외래 키 드롭 다운 목록은 실제로 DataGrid의 결과 집합을 구동합니다. ddlist가 채워지면 기본값이 설정되어 DataGrid를 필터링하는 이벤트가 발생합니다. 따라서이 비헤이비어를 사용하지 않도록 설정하는 것이 핵심입니다. 이 문제를 해결하는 첫 번째 단서는 내가 웹에서 찾은 훌륭한 일련의 블로그에서 나왔습니다. Kudos to Stephen Naughton 개념은 metacolumn 속성을 만들고 metatable 부분 클래스의 문제가있는 엔터티를 장식하는 것입니다.
[MetadataType(typeof(InvoiceMetadata))]
public partial class Invoice {
}
public partial class InvoiceMetadata {
[ScaffoldColumn(false)]
public string InvoiceId { get; set; }
[ScaffoldColumn(false)]
public string LiquidatorInvoiceId { get; set; }
[ScaffoldColumn(false)]
public string CreatedBy { get; set; }
[ScaffoldColumn(false)]
public System.Nullable<System.DateTime> LastModifiedDate { get; set; }
[ScaffoldColumn(false)]
public string LastModifiedBy { get; set; }
[DisableFilter]
public LeadAccount LeadAccount { get; set; }
}
내 새로 생성 된 속성 DisableFilter에서, LeadAccount (우리의 연락 테이블) 장식 :
그래서, 당신은 테이블과 메타 테이블 부분 클래스 정의 유사한을하게 될 겁니다 (I 내 DisableFilter 이름) 수집.
일단 열이 장식되면 새로운 특성에 대한 검사를 추가하여 ForeignKey.ascx 컨트롤의 기본 동작을 변경했습니다. 필터가 비활성화되어 있으면 ddlist에 기본 항목 만 채 웁니다.
if (!Page.IsPostBack) {
if (!Column.IsRequired) {
DropDownList1.Items.Add(new ListItem("[Not Set]", NullValueString));
}
if (Column.IsFilterDisabled()) {
DropDownList1.Items.Add(new ListItem(DefaultValue, DefaultValue));
}
else {
PopulateListControl(DropDownList1);
}
// Set the initial value if there is one
string initialValue = DefaultValue;
if (!String.IsNullOrEmpty(initialValue)) {
DropDownList1.SelectedValue = initialValue;
}
}
}
내가 전체 솔루션이라고 부르는 그 필터는 주로 사용자 친화적 인 이름을 포함하지 않습니다. 아직이 문제를 해결하지는 않았지만 문제 해결에 한 걸음 더 다가 가야합니다.