【问题标题】:How to get input text from selected dropdown in ASP.NET Core 3.1 MVC如何从 ASP.NET Core 3.1 MVC 中的选定下拉列表中获取输入文本
【发布时间】:2020-06-27 22:45:17
【问题描述】:

我正在使用 ASP.NET Core 3.1 MVC 创建带有表单的页面。下拉列表中填充了数据库中的数据。在我的控制器中,我想从下拉列表中捕获所选项目的文本。现在我可以捕获与所选项目关联的 ID。

我的模特:

public int ID { get; set; }
public string bookName { get; set; }
public string Author { get; set; }

我的cshtml:

<form method="post" asp-controller="Index" asp-action="Index" role="post">
    <div class="form-group">
        <label asp-for="bookName"></label>
        <select name="bookName" asp-items="@(new SelectList(ViewBag.message, "ID", "bookName"))"></select>
    </div>
</form>

我的控制器:

        public void PopulateBooks()
        {
            List<bookModel> bookName = new List<bookModel>();
            bookName = (from a in _context.bookModel select a).ToList();
            bookName.Insert(0, new bookModel { ID = 0, bookName = "" });
            ViewBag.message = bookName;
        }

[HttpPost]
public async Task<IActionResult> Index([FromForm] bookModel model)
{
  string bookName = HttpContext.Request.Form["bookName"];
}

我的字符串变量“bookName”返回所选书籍的 ID,但我想要所选书籍的名称。谢谢!

【问题讨论】:

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


    【解决方案1】:

    这并不特定于 Asp.Net MVC 或 Razor,但它是用于将表单数据发布到服务器端应用程序的一般浏览器端设计实践。 &lt;select&gt; 元素中的 &lt;option&gt; 元素具有 value 作为属性和用于其显示文本的内部文本。

    <select name="mySelect">
      <option value="1">bookname 1</option>
      <option value="2">bookname 2</option>
      <option value="3">bookname 3</option>
    </select>
    

    当您将表单发布到 Web 应用程序时,浏览器会序列化所选选项的 value 属性,然后将其与表单中的其他输入值一起发布。

    这里最好的方法是坚持传递书籍 ID 信息而不是书籍名称,然后再次从服务器端的数据库中检索与该 ID 匹配的书籍记录。这种方法将防止用户向您的应用程序发送不需要的文本。否则,他们可以使用 JavaScript 发布他们想要发布的内容,而不是选择框内的内容。

    将您的选择元素名称更改为“ID”,您可以在发布表单时检索模型中的 ID 值。并使用该 ID 从您的数据库中查找书名。

    <form method="post" asp-controller="Index" asp-action="Index" role="post">
        <div class="form-group">
            <label asp-for="ID"></label>
            <select name="ID" asp-items="@(new SelectList(ViewBag.message, "ID", "bookName"))"></select>
        </div>
    </form>
    

    [HttpPost]
    public async Task<IActionResult> Index([FromForm] bookModel model)
    {
      int bookID = model.ID;
      model.bookName = (from a in _context.bookModel where a.ID == bookID select a.bookName).FirstOrDefault()
      // do whatever you want to do with book name using model.bookName now...
    }
    

    但是,如果尽管采用了这种最佳做法,您仍然想发布书名,那么您可以简单地将书名用于 value 和文本信息。

    <select name="bookName" asp-items="@(new SelectList(ViewBag.message, "bookName", "bookName"))"></select>
    

    这将产生:

    <select name="bookName">
      <option value="bookname 1">bookname 1</option>
      <option value="bookname 2">bookname 2</option>
      <option value="bookname 3">bookname 3</option>
    </select>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-01
      • 1970-01-01
      相关资源
      最近更新 更多