gpt4 book ai didi

c# - 在发布模型中保留 SelectList

转载 作者:太空狗 更新时间:2023-10-29 20:17:12 24 4
gpt4 key购买 nike

在 MVC4 中:

我的模型中有以下用于下拉列表的属性:

public SelectList Subjects { get; set; }

我在页面加载时在我的 Index() 操作中设置 Subjects 属性并返回模型。

使用 SelectListItems 可以很好地填充下拉列表。

@Html.DropDownListFor(x => x.Subject, new SelectList(Model.Subjects, "Text", "Text", "Other"))

当我提交表单时,模型中的 Subjects SelectList 已更改为 null。必须有一种简单的方法来将其保存在 HttpPost 上。我假设我也想提交和发布此 SelectList 以及所有表单字段?我该怎么做?

最佳答案

Post 操作之后重新填充 SelectList 已被普遍接受。只需将它提取到一个方法中,然后在 GetPost 操作中调用它。

将它再次发回给 Controller 不是可行的方法。您可以将项目缓存在 SelectList 中,这样您就不必对数据存储进行两次查询。

例子:

public ActionResult Create()
{
var model = new SubjectModel();
PopulateSubjectList(model);
return View(model);
}

[HttpPost]
public ActionResult Create(SubjectModel model)
{
if (ModelState.IsValid)
{
// Save item..
}
// Something went wrong.
PopulateSubjectList(model);
return View(model);
}

private void PopulateSubjectList(SubjectModel model)
{
if (MemoryCache.Default.Contains("SubjectList"))
{
// The SubjectList already exists in the cache,
model.Subjects = (List<Subject>)MemoryCache.Default.Get("SubjectList");
}
else
{
// The select list does not yet exists in the cache, fetch items from the data store.
List<Subject> selectList = _db.Subjects.ToList();

// Cache the list in memory for 15 minutes.
MemoryCache.Default.Add("SubjectList", selectList, DateTime.Now.AddMinutes(15));
model.Subjects = selectList;
}
}

注意:MemoryCache 使用 System.Runtime.Caching 命名空间。请参阅:System.Runtime.Caching namespace .

此外,缓存应该位于 Controller (或业务层)和数据访问层之间的单独层中,这只是为了清楚起见。

关于c# - 在发布模型中保留 SelectList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18703958/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com