Du exponerar ju dina domänobjekt som Category i aspx:en, lägg enumen där du har dina domänobjekt
Frågan#1
En dropdowlist ska bindas.
aspx:
IList<Category> categories = Bll.GetCategories(IncludeRootCategory.Yes);
DropDownList parent = (DropDownList)fvCategory.FindControl("Parent");
parent.DataSource = categories;
parent.DataTextField = "Name";
parent.DataValueField = "Id";
parent.DataBind();
bll:
public IList<Category> GetCategories(IncludeRootCategory includeRootCategory)
{
CategoryDao dao = new CategoryDao();
return dao.GetCategories(includeRootCategory);
}
[b]public enum IncludeRootCategory
{
Yes,
No
}[/b]
dao:
public IList<Category> GetCategories([b]bool[/b] includeRootCategory)
{
IList<Category> categoryList = CurrentSession.CreateCriteria(typeof(Category)).List<Category>();
if (!includeRootCategory)
categoryList.RemoveAt(0);
return categoryList;
}
aspx --> bll --> dao
Problemet/felet med koden är att metoden i dao tar emot en bool medans metoden i bll skickar och tar emot en IncludeRootCategory.
Kan jag möblera om så att IncludeRootCategory kan användas genom hela kedjan?
En dålig lösning skulle vara att flytta enumen till dao men det betyder då att aspx måste ha en koppling dit på detta vis:
IList<Category> categories = Bll.GetCategories(CategoryDao.IncludeRootCategory.Yes);
alt. att låta enumen vara i bll och låta dao har åtkomst dit.
En annan variant är att göra en switch i bll som kollar IncludeRootCategory och sedan skickar vidare en bool beroende på värde men det känns heller inte korrekt!
Så wF:ar, hur bör jag göra? :)