填充选择列表ASP.NET核心MVC

yk9xbfzb  于 2022-11-19  发布在  .NET
关注(0)|答案(2)|浏览(174)

我正忙碌一个ASP.NET核心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>

加载页面时出现以下错误
值不能为空。(参数'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.");
}
uhry853o

uhry853o1#

我尝试使用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();
    }
}

您的Dbcontext应类似于:

public class YourDbcontext: DbContext
{
    public YourDbcontext(DbContextOptions<MvcProjContext> options)
        : base(options)
    {
    }

    public DbSet<StoreList> StoreLists{ get; set; } 

}
83qze16e

83qze16e2#

不要使用viewbag来存储列表数据。让你的视图页面模型包括列表,例如:

public class UserCreationViewModel{
    public int Id{ get; set; }
    public string Name { get; set; }
    // Any other properties....
     public List<StoreList> StoreList { get; set; }
}

在您的控制器中您的控制器:

[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);
 }

在创建用户视图名称中:

@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>

相关问题