我有下表:
CREATE TABLE CATEGORIES
(
ID NUMBER(1,0) PRIMARY KEY,
CATEGORY VARCHAR2(20)
);
INSERT INTO CATEGORIES VALUES(1,"General");
INSERT INTO CATEGORIES VALUES(2,"Interior");
INSERT INTO CATEGORIES VALUES(3,"Exterior");
INSERT INTO CATEGORIES VALUES(4,"Tuning");
INSERT INTO CATEGORIES VALUES(5,"Body");
我有一个与上表完全匹配的枚举:(请不要问为什么)
public enum Category
{General=1,Interior,Exterior,Tuning,Body}
这是我的观点模型:
public class OrdersViewModel{
public IEnumerable<SelecListItem> Categories{get;set;}
public Order Order{get;set;}
}
public Order{
public Category Category{get;set;}
}
我使用内存缓存来避免前往数据库,所以我有以下方法从缓存中获取对象(如果存在),否则从数据库中取出:
public T GetItemFromCache<T>(string key, Func<T> getFromDb) where T : class
{
T item = MemoryCache.Default.Get(key) as T;
if (item == null)
{
item = getFromDb();
if (item != null)
MemoryCache.Default.Add(key, item, DateTime.Now.AddMinutes(1));
}
return item;
}
在我的行动方法中,我执行以下操作:
public ActionResult Index(){
MyViewModel vm=new MyViewModel();
vm.Categories =
GetItemFromCache("categories", () =>
context.Categories.OrderBy(x => x.ID).ToList().Select(x => new
SelectListItem { Value = x.ID.ToString(), Text = x.Category }));
}
最后我认为这样做:
@Html.DropDownListFor(x => x.Order.Category, Model.Categories, "",)
在action方法中,正如您所看到的,我使用实体框架从数据库中获取记录,并按ID对项目进行排序。所以他们总是要订购。问题是,定期地,交换结果列表中最后两个项目的位置,而不是:
General,Interior,Exterior,Tuning,Body
我得到了
General,Interior,Exterior,Body,Tuning
我通过重新启动IIS来解决这个问题。回收池也可以完成这项工作。我没有使用任何javascript来填充下拉列表。你知道问题可能是什么吗?