gpt4 book ai didi

c# - 如何从 ASP.NET Core 3.1 MVC 中的选定下拉列表中获取输入文本

转载 作者:行者123 更新时间:2023-12-04 17:26:53 25 4
gpt4 key购买 nike

我正在使用 ASP.NET Core 3.1 MVC 创建一个带有表单的页面。下拉列表中填充了数据库中的数据。在我的 Controller 中,我想从下拉列表中捕获所选项目的文本。现在我能够捕获与所选项目关联的 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>

我的 Controller :

        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,但我想要所选书籍的名称。谢谢!

最佳答案

这并非特定于 Asp.Net MVC 或 Razor,但它是将表单数据发布到服务器端应用程序的一般浏览器端设计实践。 <option> <select> 中的元素元素有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>

关于c# - 如何从 ASP.NET Core 3.1 MVC 中的选定下拉列表中获取输入文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62616322/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com