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