【问题标题】:html.dropdownlistfor bind selected value to one column, set another column to the selected Texthtml.dropdownlistfor 将选定的值绑定到一列,将另一列设置为选定的文本
【发布时间】:2017-03-16 20:07:46
【问题描述】:

我对 mvc 和 razor 视图相当陌生。 我有一个 DropDownListFor ,它成功地填充了数据表中的值和文本列表。 我也成功地将所选值绑定到我的数据模型中的数据列。 但是,我正在使用的数据库没有标准化,我需要从所选项目中获取文本,并将其绑定到我的数据模型中的另一个字段。 做到这一点有多难?

【问题讨论】:

    标签: asp.net-mvc view html.dropdownlistfor


    【解决方案1】:

    您有多种选择:

    1.提交后调用数据库获取文本

    public ActionResult Submit(int dropDownListId) 
    {
        var text = string.Empty;
        var dataItem = this._dbContext.SomeTableData.SingleOrDefault(m => m.Id == dropDownListId);
    
        if (dataItem != null) 
        {
            text = dataItem.Title;
        }
    
        // continue
    }
    

    2。调整下拉列表值,解析控制器/业务层的值: 如果您使用默认的 DropDownListFor HtmlHelper,您的数据源类型为 IEnumerable<SelectListItem>,因此在构建 Model 类时,您要将其传递给视图,请执行以下操作:

    //get data from database
    var dataSource = this_dbContext.SomeTableData.Select(m => new SelectListItem()
    {
        Value = string.Format("{0}|{1}", m.Id, m.Title),
        Text = m.Title
    }
    

    提交数据后解析值:

    public ActionResult Submit(string dropDownListValue) {
        string[] values = dropDownListValue.Split('|'); 
        // values[0] = value
        // values[1] = text
    }
    

    3.将隐藏字段添加到视图并使用 JavaScript 存储文本

    $('#dropDownListId').on('change', function () {
        var text = $(this).find('option:selected').text();
        $('#dropDownListText').val(text); // hidden field
    });
    

    并在提交后收集值:

    public ActionResult Submit(int dropDownListId, string dropDownListText)
    {
        //logic
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多