首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MVC核心选择标签不更新字段值

问MVC核心选择标签不更新字段值
EN

Stack Overflow用户
提问于 2019-02-13 12:57:26
回答 1查看 1.1K关注 0票数 0

我有一个带有下拉菜单的应用程序,我希望从下拉菜单中选择的值来更新我的模型,但是由于某种原因它不会更新,我在路由到我的IActionResult方法时总是得到空值。

型号:

代码语言:javascript
复制
public class MyModel
{
    public string Name{ get; set; }
    public List<SelectListItem> MyNames { get; set; }
}

查看:

代码语言:javascript
复制
    <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>

主计长:

代码语言:javascript
复制
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标签呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-14 08:17:46

听起来你犯了两个错误:

1)根据MDN文档,<a>标记的type属性用于为链接到URL的资源指定MIME类型的媒体。它从未打算用表单元素(包括<select>元素)来执行提交。因此,在重定向到Name操作时,不会更改Name属性值。

2)页面没有指定用于从<form>元素提交所选值的任何<select>元素/标记助手。表单提交是将其值发送回控制器操作方法所必需的。

固定的页面标记应该如下所示:

代码语言:javascript
复制
<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>元素的更新值,因为表单内容将作为查询字符串发送。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54670774

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档