현재 프로젝트 내의 여러 위치에서 사용할 수 있도록 일부 사용자 정의 컨트롤을 개발 중입니다. 하나의 컨트롤은 고객의 주소 목록을 편집하는 것입니다. 이 작업은 프로젝트 내의 여러 위치에서 수행되어야하므로 간단한 사용자 컨트롤로 만들고 싶습니다. 사용자 정의 컨트롤에는 리피터 컨트롤이 포함되어 있습니다. 기본적으로 중계기는 편집 할 주소 항목 하나를 표시합니다. 더 많은 주소를 추가해야하는 경우 사용자는 단추를 클릭하여 입력 할 추가 주소를 추가 할 수 있습니다. 사용자 정의 컨트롤은 새로운 주소를 생성하고 기존 주소를 편집하는 데 사용됩니다. 주소 사업체는 다음과 같이 보입니다 : 당신이 거리와 도시가있는 경우 주소는 인스턴스화 할 수 있습니다 볼 수 있듯이ASP.net 사용자 정의 컨트롤 및 비즈니스 엔터티
public class Address
{
public string Street { get; set; }
public City City { get; set; }
public Address(string street, City city)
{
Check.NotNullOrEmpty(street);
Check.NotNull(city);
Street = street;
City = city;
}
}
합니다.
이제 사용자 정의 컨트롤이 Addresses
이라는 컬렉션 속성을 노출한다고 생각했습니다. 이 등록 정보의 getter는 repeater에서 주소를 수집하여 콜렉션으로 리턴합니다. 설정자는 repeater에 편집 할 주소를 데이터 바인딩합니다. 이처럼
는 : 객체 지향은 매우 쉽게 컨트롤을 재사용 할 수 있기 때문에
public partial class AddressEditControl : System.Web.UI.UserControl
{
public IEnumerable<Address> Addresses
{
get
{
IList<Address> addresses = new List<Address>();
// collect items from repeater and create addresses
foreach (RepeaterItem item in addressRepeater.Items)
{
// collect values from repeater item
addresses.Add(new Address(street, city));
}
return addresses;
}
set
{
addressRepeater.DataSource = value;
addressRepeater.DataBind();
}
}
}
는 우선이 방법을 좋아했다. 하지만 내 프로젝트의 일부 장소에서 사용자가 일부 주소를 입력 할 수 있도록이 컨트롤을 사용하고 싶었습니다. 그리고 각 리피터 항목의 거리 입력 필드를 미리 채우고 싶었습니다. 사용자가 그 데이터를 입력해야하므로 입력하지 않아도됩니다.
이제이 사용자 정의 컨트롤은 유효한 상태의 주소 만 받아들입니다 (주소 개체에는 생성자가 하나만 있기 때문에). 그래서 난 할 수 없어 : 도시가 null이기 때문에이 주소에서 오류가 발생하는 것이기 때문에
IList<Addresses> addresses = new List<Address>();
addresses.Add(new Address("someStreet", null)); // i dont know the city yet (user has to find it out)
addressControl.Addresses = addresses;
따라서 위가 불가능합니다.
이제 내 질문 : 어떻게 그러한 컨트롤을 만들 수 있습니까? ;) 실제 주소 대신 주소 DTO를 사용하려고 생각 했으므로 나중에 주소에 매핑 할 수 있습니다. 그렇게하면 주소가 유효하지 않아도되는 주소 컬렉션을 전달할 수 있습니다. 또는 사용자 컨트롤이 작동하는 방식을 잘못 이해 했습니까? 모범 사례가 있습니까?