html.dropdownlistfor将选定值绑定到一列,将另一列设置为所选文本

时间:2017-03-16 20:07:47

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

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

1 个答案:

答案 0 :(得分:0)

您有几种选择:

<强> 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
}