【问题标题】:How do I get the Selected Value of a DropDownList in ASP.NET Core MVC App如何在 ASP.NET Core MVC 应用程序中获取 DropDownList 的选定值
【发布时间】:2020-12-30 01:55:41
【问题描述】:

我的视图中有以下下拉列表:

@{
    var listado = new List<SelectListItem>()
    {
       new SelectListItem()
       {
           Text ="YES",
           Value ="1"
       },
       new SelectListItem()
       {
           Text = "NO",
           Value = "2"
       }
   };
}

<div class="form-group">
    <label class="control-label">Is it True ?</label>
    @Html.DropDownList("miDropDownList",listado)
</div>

我想在控制器中获取选定的值“YES”或“NO”,如下所示:

IActionResult ControllerAction(){
  var theValue = dropdownList.SelectedValue //this is pseudocode syntax but you understand I want to get 
                                            //the value

 // with the value I will do something like this: 
  User userinstance = new User {
     Id = 1,
     Name = "john",
     isJohnTall = theValue.Value 
  }
}

我希望其他答案中的一些简单的东西我见过绑定到模型的 DropDownLists,但我只想在下拉列表中选择字符串并能够在控制器中对它们做一些事情。

【问题讨论】:

  • 绑定到模型有什么问题?
  • 数据库设计不好,所以我要填充的字段是字符串,而不是应该是布尔值,因为它是一个是或不是属性,所以让我感到困惑,我认为这会更容易接受或不接受,然后当我创建要添加到表中的用户实例时,我传递了 ots 值。老实说,我对如何将 Dropdown 链接到模型中的属性也有点困惑。 .
  • 听起来您需要一个与您的 ef 实体模型分开的视图模型。你可以在那里进行转换。或者您可以使用 HasConversion() 映射您的 ef 模型属性以将字符串映射到 bool
  • 这就像拥有一个模拟模型?然后将模拟模型属性传递给真实模型的新实例?
  • 无论如何我没有办法捕捉用户选择的内容并在我的控制器中使用它吗?我的意思是我正在制作一个表格以在数据库中发布一个寄存器,而只是该属性是一个选择标签,我认为这很简单。我不想映射或变得复杂

标签: asp.net-core razor asp.net-core-mvc


【解决方案1】:

您可以将 JQuery 与 ajax 一起使用。

类似这样的:

<div class="form-group">
    <label class="control-label">Is it True ?</label>
    @Html.DropDownList("miDropDownList", listado, new { @onchange = "GetYesOrNo()"})
</div>
<script src="~/lib/jquery/dist/jquery.min.js"></script>
<script>

    function GetYesOrNo() {
        var selectElement = document.querySelector('#miDropDownList');
        var option = selectElement.value;

        $.ajax({
            url: '/Home/GetYesOrNo',
            type: 'GET',
            dataType: 'json',
            contentType: 'application/json; charset=utf-8',
            mimeType: 'text/html',
            data: { getOption : option },
            success: function (returnValue) {
                alert(returnValue);
            }
        });
    };
</script>

在 Home Controller 中,添加这个 JsonResult:

    public JsonResult GetYesOrNo(int getOption)
    {
        if (getOption == 1) return Json("Option: YES");
        return Json("Option: NO");
    }

【讨论】:

  • 好的,所以在我的 UserController 中,我调用 GetYesOrNo() 方法来获取 JSON 结果“选项:是”或“选项:否”,但我应该发送什么作为参数?
  • 怎么可能没有办法简单地在我的控制器中引用 DropdownList 而不必将数据绑定到我所需要的模型
  • @armandot 没有简单的方法可以做到这一点。您需要在控制器级别将数据绑定到模型。使用 ajax 提交值,如此处所示,或者仅使用提交按钮提交表单。无论哪种方式,您都必须将其绑定到变量或模型属性。控制器与视图/剃须刀页面分离,因此服务器不知道页面上的内容。 Read this article for more info
【解决方案2】:

您可以使用表单提交数据。 该表单将提交值,因此您可以将值修改为文本。

您可以像下面这样更改您的代码。

查看

    @{
    var listado = new List<SelectListItem>()
{
                   new SelectListItem()
                   {
                       Text ="YES",
                       Value ="YES"
                   },
                   new SelectListItem()
                   {
                       Text = "NO",
                       Value = "NO"
                   }
               };
}
@using (Html.BeginForm("GetYesOrNo", "User"))
{
    <div class="form-group">
        <label class="control-label">Is it True ?</label>
        @Html.DropDownList("miDropDownList", listado)
    </div>
    <button type="submit">Find</button>
}

动作

public IActionResult GetYesOrNo(string miDropDownList)
    {
        //.....
        return View();
    }

测试结果

以及如何通过下拉列表绑定模型,可以看我的this回复,可能会有帮助。

【讨论】:

  • 谢谢你解决了我的问题,这很容易......这正是我从一开始就在做的事情,但是在操作中,我传递了一个 List 而不是传递一个字符串...我不明白编译器如何知道我想要我的项目的 VALUE 属性,只需创建一个与 ddl 名称相同的字符串类型的参数?...再次感谢它的工作!
猜你喜欢
  • 2013-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多