我有一个带有下拉菜单的应用程序,我希望从下拉菜单中选择的值来更新我的模型,但是由于某种原因它不会更新,我在路由到我的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标签呢?
发布于 2019-02-14 08:17:46
听起来你犯了两个错误:
1)根据MDN文档,<a>标记的type属性用于为链接到URL的资源指定MIME类型的媒体。它从未打算用表单元素(包括<select>元素)来执行提交。因此,在重定向到Name操作时,不会更改Name属性值。
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>元素的更新值,因为表单内容将作为查询字符串发送。
https://stackoverflow.com/questions/54670774
复制相似问题