我正忙于一个ASP.NET Core MVC应用程序,我正试图填充一个下拉列表。我创建了一个视图模型,并在StoresController
中添加了一个方法,该方法返回我想在下拉列表中显示的商店列表。我一直在做一些在线教程,因为我是asp的新手。
视图模型:
public class StoreListViewModel
{
public List<StoreList> StoreList { get; set; } = new List<StoreList>();
}
public class StoreList
{
public string StoreId { get; set; } = null!;
public string StoreName { get; set; } = null!;
}
StoresController
:
public IActionResult LoadStoreList()
{
if (ModelState.IsValid)
{
var storeList = new StoreListViewModel().StoreList.Select
(x => new SelectListItem { Value = x.StoreId, Text = x.StoreName }).ToList();
ViewBag.Stores = storeList;
}
return NotFound();
}
我正在尝试使用ViewBag
来调用我的LoadStoreList()
方法。
<select name="storeList" class="form-control" asp-items="@(new SelectList(ViewBag.Stores, "Value", "Text"))"></select>
当我加载我的页面时,我得到以下错误
值不能为null。(参数"items"(
我需要下拉列表的页面是我的CreateUser.cshtml
,它绑定到我的UserModel
并具有UsersController
。我创建的列出商店的方法在我的StoresController
中,它绑定到我的StoresModel
。所以我不确定这是否是问题的原因。
我已经和这个问题斗争了好几天了,如果有人能帮我解决这个问题,或者向我展示一个更好的方法,那就太好了。
*编辑
UserIndex((方法是打开我的用户页面时激发的第一个方法,我是否从那里调用LoadStoreList((法?
用户控制器
public async Task<IActionResult> UsersIndex()
{
return _context.UsersView != null ?
View(await _context.UsersView.ToListAsync()) :
Problem("Entity set 'ApplicationDbContext.Users' is null.");
}
我正试图使用ViewBag来调用我的LoadStoreList((方法。
ViewBag不能用于调用任何方法。您只需要在呈现您的节目下载列表页面的方法中设置ViewBag
的值。
根据你的描述,你说你需要下拉列表的页面是CreateUser.cshtml
。假设您使用CreateUser
操作来呈现CreateUser.cshtml
页面。
CreateUser.cshtml:
<select name="storeList" class="form-control" asp-items="@(new SelectList(ViewBag.Stores, "Value", "Text"))"></select>
控制器:
public class YourController : Controller
{
private readonly YourDbcontext _context;
public YourController(YourDbcontext context)
{
_context = context;
}
[HttpGet]
public IActionResult CreateUser()
{
var storeList = _context.StoreLists.Select
(x => new SelectListItem { Value = x.StoreId , Text = x.StoreName }).ToList();
ViewBag.Stores = storeList;
return View();
}
}
YourDbcontext应该类似于:
public class YourDbcontext: DbContext
{
public YourDbcontext(DbContextOptions<MvcProjContext> options)
: base(options)
{
}
public DbSet<StoreList> StoreLists{ get; set; }
}
不要使用viewbag来存储列表数据。使您的视图页面模型包括列表,例如:
public class UserCreationViewModel{
public int Id{ get; set; }
public string Name { get; set; }
// Any other properties....
public List<StoreList> StoreList { get; set; }
}
在您的控制器YourController:
[HttpGet]
public IActionResult CreateUser()
{
var storeList = new StoreListViewModel().StoreList.Select
(x => new SelectListItem { Value = x.StoreId, Text = x.StoreName }).ToList();
UserCreationViewModel model=new UserCreationViewModel{
StoreList = storeList
};
return View("createUserViewName", model);
}
在createUserViewName:中
@Html.DropDownList("StoreId", new SelectList(Model.StoreList, "StoreId", "StoreName"), "Select", new { @class = "form-control" })
或
<select class="form-control" asp-for="@Model.StoreId" asp-items="@(new SelectList(Model.StoreList, "StoreId", "StoreName"))">
<option value="-1">Select</option>
</select>