c# - MVC 核心选择标签不更新字段值
问题描述
我有一个带有下拉菜单的应用程序,我希望从下拉菜单中选择的值来更新我的模型,但由于某种原因它不会。路由到我的 IActionResult 方法时,我总是得到空值。
模型:
public class MyModel
{
public string Name{ get; set; }
public List<SelectListItem> MyNames { get; set; }
}
看法:
<label asp-for="Name" class="control-label col-md-3"></label>
<div class="col-sm-9">
<select asp-for="Name" asp-items="Model.MyNames" class="form-control"></select>
</div>
<span asp-validation-for="Name" class="text-danger"></span>
<span class="text-right">
<a class="btn btn-info btn-lg btn-block" type="submit"
asp-action="LoadData"
asp-controller="MyController" ,
asp-route-Name="@Name">Load Person</a>
</span>
控制器:
public IActionResult Create()
{
var names = GetNamesFromFile(fileName);
var myModel = new MyModel();
foreach (var name in names)
{
myModel.MyNames.Add(new SelectListItem() { Value = name, Text = name});
}
return View(myModel);
}
public IActionResult LoadData(string Name)
{
var person = GetPersonByName(Name);
return RedirectToAction(nameof(Index), "MyController", new { id = template.PersonId });
}
当我路由回我的 ActionResult 时,我希望 Name 参数具有我在下拉菜单中设置的值。代码对我来说似乎很好,我不知道为什么它不起作用。
编辑:显然,问题在于提交按钮。如果我使用 href 标记,表单将不会提交,下拉列表也不会被调用。有没有办法让这个工作成为一个 href 标签?
解决方案
听起来你犯了两个错误:
1) 根据MDN 文档,<a>
标签的type
属性用于为链接到 URL 的资源指定媒体的 MIME 类型。它从未打算使用表单元素执行提交,包括<select>
元素。因此,在重定向到操作时,Name
属性值永远不会改变。LoadData
2) 该页面未指定任何<form>
用于从元素提交所选值的元素/标签助手<select>
。表单提交对于将其值发送回控制器操作方法是必要的。
固定页面标记应如下所示:
<form asp-controller="MyController" asp-action="LoadData" method="get">
<label asp-for="Name" class="control-label col-md-3"></label>
<div class="col-sm-9">
<select asp-for="Name" asp-items="Model.MyNames" class="form-control"></select>
</div>
<span asp-validation-for="Name" class="text-danger"></span>
<span class="text-right">
<button class="btn btn-info btn-lg btn-block" type="submit">Load Person</button>
</span>
</form>
通过使用上述设置,Name
参数应该包含来自<select>
元素的更新值,因为表单内容将作为查询字符串发送。
推荐阅读
- python - 让 discord.py 机器人使用外部命令
- flutter - Flutter StatelessWidget
- python - Django 将数据从外部 api 放入数据库
- react-native - TypeError:尝试在 React-Native 中创建简单的多项选择时,超级表达式必须为 null 或函数
- java - 使用个人 API 令牌在 Java 中验证 Jira Api
- javascript - 使用偏移函数附加行以填充数据以更正单元格
- json - POST 和 PUT 方法在 Postman 中不起作用,但在 Swagger 中起作用
- azure - 有没有办法在 azure devops 仪表板的 markdown 中显示最后构建 id?
- python-3.x - 通过 xpath 或 id 定位按钮
- winapi - 拔下网线时使用多播 DNS