我有有大约10下拉菜单,当我加载这个页面对其中有没有保存的反对数据ID的视图的下拉菜单中有“请选择”所选的值,它是创建作为即时通讯创造了新的记录。
当我导航回到该视图与具有保存的针对它的数据的ID,每个选择的值下拉通过我通过在以这又是正确的视图数据集。
但是,如果我再重新加载该页面使用没有保存的反对数据的ID,在下拉菜单中选择值从此前的纪录设定! 我已经调试这一遍又一遍并没有数据链接它,我可以看到它在传递NULL为每个下拉菜单选择值的ID。 我假设这是与ModelState中呢? 所以,我想在我控制器开始以下
ModelState.Clear();
之前load方法被调用,但问题仍然存在,有没有人遇到过吗? 我GOOGLE了一个解决方案,但所出现的唯一的东西,“MVC下拉不记得选择的值”,这是相反我有问题。
- *更新
我想我已经找到了问题,我目前使用如何缓存在MVC对象 ,所以当我打开从数据库页面的下拉菜单中我然后将它们存储在缓存中,如下所示:
if (CacheExtension.IsIncache("ListType"))
{
model.ListType = CacheExtension.GetFromCache<List<SelectListItem>>("ListType");
model.ListTime = CacheExtension.GetFromCache<List<SelectListItem>>("ListDuration");
model.ListPostageOption = CacheExtension.GetFromCache<List<SelectListItem>>("ListPostage");
model.ListPricingType = CacheExtension.GetFromCache<List<SelectListItem>>("ListPrice");
}
else
{
const string queryMultiple = @"
SELECT StatusId, StatusDescription from [Status].table1
SELECT StatusId, StatusDescription from [Status].table2
SELECT StatusId, StatusDescription from [Status].table3
SELECT StatusId, StatusDescription from [Status].table4";
using (var sqlCon = new SqlConnection(Con.ReturnDatabaseConnection()).QueryMultiple(queryMultiple))
{
var duration = sqlCon.Read().ToList();
var type = sqlCon.Read().ToList();
var options = sqlCon.Read().ToList();
var pricing = sqlCon.Read().ToList();
model.ListType = new List<SelectListItem>();
model.ListTime = new List<SelectListItem>();
model.ListPostageOption= new List<SelectListItem>();
model.ListPricingType = new List<SelectListItem>();
model.ListType .AddRange(
type.Select(
item => new SelectListItem { Text = item.StatusDescription, Value = item.StatusId.ToString() }));
model.ListTime.AddRange(
duration.Select(
item => new SelectListItem { Text = item.StatusDescription, Value = item.StatusId.ToString() }));
model.ListPostageOption.AddRange(
options.Select(
item => new SelectListItem { Text = item.StatusDescription, Value = item.StatusId.ToString() }));
model.ListPricingType.AddRange(
pricing.Select(
item => new SelectListItem { Text = item.StatusDescription, Value = item.StatusId.ToString() }));
// Cache everything
CacheExtension.SaveTocache("ListType", model.ListAdvertType, new DateTime(1));
CacheExtension.SaveTocache("ListDuration", model.ListDuration, new DateTime(1));
CacheExtension.SaveTocache("ListPostage", model.ListPostageOption, new DateTime(1));
CacheExtension.SaveTocache("ListPrice", model.ListPricingType, new DateTime(1));
}
}
和我重新加载,而不是调用我检查缓存数据库页面,如果存在的话,我从那里拉(这是哪里出了问题),我刚才注释掉从缓存的拉动,它已经不记得工作的下拉菜单以前的值,但为什么呢?