Asp.net core SelectList不返回文本值,仅返回ID

Asp.net core SelectList不返回文本值,仅返回ID,asp.net-core,model-view-controller,view,selectlist,Asp.net Core,Model View Controller,View,Selectlist,我对asp net核心非常陌生,在将值从视图传递到控制器时,我正在尝试实现一个选择列表。其他一切都正常,我面临的唯一问题是,只有ID被传递给控制器,而不是文本/名称。 有人能告诉我哪里出了问题吗?下面是我的代码 查看代码段 财政年度 模型片段 公共类VMOM { 公共int FinancialYear{get;set;} } 公共类下拉列表 { 公共int ID{get;set;} 公共字符串文本{get;set;} } 控制器代码段 [HttpGet] 公共IActionResult创建 {

我对asp net核心非常陌生,在将值从视图传递到控制器时,我正在尝试实现一个选择列表。其他一切都正常,我面临的唯一问题是,只有ID被传递给控制器,而不是文本/名称。 有人能告诉我哪里出了问题吗?下面是我的代码

查看代码段 财政年度 模型片段 公共类VMOM { 公共int FinancialYear{get;set;} } 公共类下拉列表 { 公共int ID{get;set;} 公共字符串文本{get;set;} } 控制器代码段 [HttpGet] 公共IActionResult创建 { VMOM VMOM=新VMOM; ViewBag.FinancialYear=新建SelectListGetFinancialYearList,ID,文本,0.ToList; 返回ViewvmOM; } [HttpPost] 公共IActionResult CreateVMOM vmOM { 返回ViewvmOM; } 私人列表GetFinancialYearList { List vmDropdowns=新列表 { 新的VMDropDown{ID=1,Text=2019}, 新建VMDropDown{ID=2,Text=2020} }; 返回下拉列表; } A)在行动方法中接收的值的SS;请注意,在财政年度中,仅显示该年度的ID,而不是文本值,即2020年


最简单的方法是将ID值更改为与文本相同的值

List<VMDropDown> vmDropdowns = new List<VMDropDown>
{
    new VMDropDown() { ID = 2019, Text = "2019" },
    new VMDropDown() { ID = 2020, Text = "2020" }
};

如果你不介意一点javascript,你可以很容易地实现你想要的

我们添加了一个隐藏的输入字段,其值在选择更改时更新。 因此,当我们提交表单时,隐藏输入的值将被提交并与我们的模型绑定,请参见下面的屏幕截图

剃刀:

提交 模型

公共类VMOM { 公共int Id{get;set;} 公共字符串年份{get;set;} } 控制器:

[HttpGet] 公众谘询结果索引 { var数据=新列表{ 新VMOM{Id=1,年份=2018}, 新VMOM{Id=2,年份=2019}, 新的VMOM{Id=3,年份=2020}, 新VMOM{Id=4,年份=2077} }; ViewBag.List=新建SelectListdata,Id,年份; 返回ViewIndex,新VMOM; } JS

$document.readyfunction{ $FYear.onchange,函数{ $FYearText.val$this.findoption:selected.text; }; }; 结果:


另外,为了简洁起见,我在本例中使用jQuery。

这是正常行为。select中的ID是选项的值,提交表单时,提交的值不是文本。您可以使用Javascript和Ajax传递文本和id。好的,谢谢。但是,当我第一次以这种方式编码第一组参数时,我能够得到值。我还得到了控制器中的值。但当我为其他参数添加相同的代码,然后重新运行项目时,其行为发生了变化。那是什么?在文本值为整数之前,这一切都很正常。。因为ID不会接受字符串参数。同样,通过将字符串赋予ID,它将停止接受任何值,并且对于数据库,它可能无法工作。。我不确定数据库的事情,虽然我在前端。但是ID是int的默认值。为什么ID可以是string?在VMDropDown中它被定义为int。这不仅是我显示年份的情况,我还必须显示许多不同的记录,这些记录不是整数。所以,我不能接受这种方法。谢谢你,这种方法对我很有效。虽然我在回复之前就知道了,但对于像我这样的新手来说,这很有效。Y