填充选择列表ASP.NET Core MVC



我正忙于一个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>

相关内容

  • 没有找到相关文章