我正在使用ASP.NET Web Forms/C#
。
我正在使用此功能根据州DropDownLists
中选定的州填充城市DropDownList
。州和城市有3 DropDownLists
。(住宅,本地,办公室)。
这是我的功能。
public void CityFill(int index,int id)
{
var city = CustomerBLL.GetCities(index);
//Loop through all the cities in st object
foreach (var c in city)
{
//If id=0 then fill all dropdowns
if (id == 0)
{
NewCustomerddlResidentialCity.Items.Add(c.city_name.Trim());
NewCustomerddlOfficeCity.Items.Add(c.city_name.Trim());
NewCustomerddlNativeCity.Items.Add(c.city_name.Trim());
NewCustomerddlNomineeCity.Items.Add(c.city_name.Trim());
}
else
{
//If 1 then fill Res City
if(id==1)
NewCustomerddlResidentialCity.Items.Add(c.city_name.Trim());
//If 2 then fill Off City
if(id==2)
NewCustomerddlOfficeCity.Items.Add(c.city_name.Trim());
//If 3 then fill nat city
if(id==3)
NewCustomerddlNativeCity.Items.Add(c.city_name.Trim());
}
}
}
基于id的此函数将根据id参数填充适当的城市DropDownLists
。
目前位于code behind
。我的问题是此处是否应使用此功能,还是应将其移至我的Business Logic class
。
这是我的CustomerBLL.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Drawing;
using System.Text.RegularExpressions;
using System.Data.SqlClient;
using System.Threading;
using System.Globalization;
using System.Web.Services;
using System.IO;
using System.Xml.Linq;
using System.Web.Security;
using System.Text;
namespace CwizBankApp
{
public class CustomerBLL
{
public IList<mem_city> GetCities(int index)
{
using (var db = new DataClasses1DataContext())
{
var city = db.mem_cities.Where(c => c.state_id.Equals(index)).ToList();
return city;
}
}
}
}
什么是正确的方法。任何人都可以指导我吗?
欢迎任何建议。
答案 0 :(得分:3)
正确的方法是将项目单独添加到下拉列表和业务逻辑中:
// this goes to business logic
public CitiesView GetCities(int id) {
var cities = new CitiesCollection();
var city = CustomerBLL.GetCities(index);
//Loop through all the cities in st object
foreach (var c in city)
{
//If id=0 then fill all dropdowns
if (id == 0)
{
cities.Residental.Add(c.city_name.Trim());
cities.Office.Add(c.city_name.Trim());
cities.Native.Add(c.city_name.Trim());
cities.Nominee.Add(c.city_name.Trim());
}
else
{
//If 1 then fill Res City
if(id==1)
cities.Residental.Add(c.city_name.Trim());
//If 2 then fill Off City
if(id==2)
cities.Office.Add(c.city_name.Trim());
//If 3 then fill nat city
if(id==3)
cities.Native.Add(c.city_name.Trim());
}
}
}
// this goes to code behind
public void FillCitiesDrowDowns(int id) {
var citiesView = GetCities(id);
NewCustomerddlResidentialCity.Items.AddRange(citiesView.Residental);
NewCustomerddlOfficeCity.Items.Add(citiesView.Office);
NewCustomerddlNativeCity.Items.Add(citiesView.Native);
NewCustomerddlNomineeCity.Items.Add(citiesView.Nominee);
}
public class CitiesView {
public List<string> Residental {get;set;}
public List<string> Office {get;set;}
public List<string> Native {get;set;}
public List<string> Nominee {get;set;}
}
通过这种方式,您可以在不触及UI元素的情况下测试所有条件,您可以替换UI元素而无需触及业务逻辑。
答案 1 :(得分:1)
应该在您的业务逻辑层上。其中一个原因是你也想在其他表单上使用这个功能,所以,你只需要调用它。
BLL
将处理业务域的一部分,而不是数据库的一部分,而不是UI的一部分(通常)。例如,使用customer
的年龄来确定他们是否有资格获得特殊老年人的折扣。 DAL不应该这样做,它应该只是检索客户数据,然后在BLL
完成工作后将其与折扣数据一起存储。