【问题标题】:Setting a MVC 5 Razor view <select asp-for = "xxx" </select> to a query将 MVC 5 Razor 视图 <select asp-for = "xxx" </select> 设置为查询
【发布时间】:2018-07-10 14:57:13
【问题描述】:

我正在使用 ASP.NET 在 C# 中创建一个 MVC Web 核心程序。该程序将包含一些要插入到已经存在的数据库中的输入 (t-SQL)。

我的问题是其中一个字段需要是由 SELECT 查询填充的下拉列表。我只需要将其显示为下拉列表,以便设施列表可以随 Db 动态变化。我的程序工作 100%,除了绑定这个下拉列表。我不需要来自设施数据库的任何数据操作。简单地说,只是一个列表,以便用户可以选择适当的名称,然后该名称将被粘贴到我创建的新表中。

我可以整天手动创建下拉菜单,但这对我没有帮助。数据连接已在别处设置。该列表将位于代码的 WellNum 部分。我已经梳理和梳理了互联网,但尚未找到解决方案。感谢您提供的任何帮助。

这是我对 Create.cshtml 的看法

<div class="form-group">
     <label asp-for="WellNum" class="control-label"></label>
     <select asp-for="WellNum" class="form-control" /> 
     <span asp-validation-for="WellNum" class="text-danger"></span>
</div>

【问题讨论】:

  • 你不是缺少 asp-items 属性吗?比如:asp-items="@(new SelectList(Model.WellNum, "value", "text"))"
  • 没有。目前,该视图显示的是一个选择列表,但其中没有任何内容
  • 我对您要完成的工作感到困惑。您的列表不包含任何内容,因为没有 html 选项标签或 asp SelectList 项目。为了使选择标签具有值,您需要指定它们是来自数据库还是硬编码......它们仍然需要指定。
  • 是的。那是我目前拥有的cshtml。这不适合我想要完成的事情,但我想你们会想看看我目前拥有什么。我不需要对列表进行硬编码。该列表需要来自 Db,但似乎所有代码都需要在 Create.cshtml 文件中
  • 您的视图有与之相关的模型吗?顶部有@model WellNum 吗?如果是这样,则使用模型填充选项。如果没有,那么您必须在代码隐藏中设置 SelectList 值。无论哪种方式,如果没有

标签: c# razor asp.net-core-mvc


【解决方案1】:

假设您有一个名为 Person 的类,如下所示:

public class Person
    {
        public string Name { get; set; }
        public int Age { get; set; }
    }

并且需要显示从数据库/存储库接收到的人员列表

我的控制器如下:

 public class PeopleController : Controller
    {
        // GET: People
        public ActionResult Index()
        {
            List<Person> people = Db.GetAllPeople();
            return View(people); //This is how you pass your strongly typed data to the view
        }
    }

在创建视图时,通过在视图开头添加以下内容将视图紧密绑定到 List 数据模型:

@model IEnumerable<WebApplication1.Models.Person>//Fully qualified name

并将您的下拉列表生成为

<div class="form-group">
     <label asp-for="WellNum" class="control-label"></label>
     <select asp-for="WellNum" class="form-control" /> 
         @foreach (var item in Model) //This creates a dropdown of all the peoples names received from the database
         {
             <option value=item.Name>item.Name</option>
         }
     <span asp-validation-for="WellNum" class="text-danger"></span>
</div>

或者

将 foreach 循环替换为

@Html.DropDownList("WellNum",new SelectList(Model,"Name","Name"))

这将生成以下html

<select id="WellNum" name="WellNum">
    <option value=valueField>dataTextField</option>
    <option value=valueField>dataTextField</option>
    ...
</select>

【讨论】:

  • 这就是我断开连接的地方,我相信。在你的例子中(非常感谢顺便说一句),你有 List people = Db.GetAllPeople();是函数GetAllPeople,我的字符串查询=“从MyTable中选择这样和这样”;?我的问题是弄清楚在哪里插入我的查询以选择我需要填充 List 的行
  • 我的代码看起来几乎和你的一样,除了在视图中,因为我还没有走得足够远来显示循环以显示列表中的属性
  • 您可以创建一个单独的层来实现您的数据库相关活动,查询可以插入到您的存储库层中
猜你喜欢
  • 1970-01-01
  • 2021-11-13
  • 1970-01-01
  • 1970-01-01
  • 2018-07-08
  • 1970-01-01
  • 1970-01-01
  • 2021-04-24
  • 2012-01-23
相关资源
最近更新 更多