使用DropDownListFor获取错误的订单

时间:2015-07-14 12:17:02

标签: asp.net-mvc entity-framework html.dropdownlistfor memorycache

我有下表:

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来填充下拉列表。你知道问题可能是什么吗?

0 个答案:

没有答案