在表单中提交下拉列表的值和文本

时间:2013-01-16 09:36:49

标签: c# .net asp.net-mvc

我使用MVC HTML Helper渲染Html DropDownList:

@Html.DropDownListFor(m => m.ParentId, menuSelectList)

我将此DropDownList放在HTML表单中。当按下此表单中的提交按钮时,将创建HTML表单数据并在POST请求中发送。此数据将包含键名ParentId,其键值为DropDownList的选定值。如何在此数据中加入DropDownList所选文字,其核心名称为ParentName

2 个答案:

答案 0 :(得分:3)

1)您可以使用隐藏的“ParentName”输入,并在您的组合(DropDownList)上触发更改事件时使用所选文本(javascript / jQuery)填充它。

2)只需在提交后从密钥中获取值(在POST操作中),就应该可以(例如db查询)。

3)以密钥包含密钥AND值的方式构建selectList(例如用~分隔,并在POST操作中拆分“key~value”)

我会亲自去找第二个解决方案,但是......

答案 1 :(得分:1)

您可以使用JavaScript,因为浏览器不会在任何地方发送所选文本。

一个技巧是将此类代码放在.aspx页面的最底部:( </body>之前)

var arrDDLs = document.getElementsByTagName("select");
for (var i = 0; i < arrDDLs.length; i++) {
    var oDDL = arrDDLs[i];
    if (!oDDL.name || oDDL.name.length === 0)
        continue;
    var inputName = oDDL.name + "_text";
    var input = document.createElement("input");
    input.type = "hidden";
    input.name = inputName;
    input.id = inputName;
    oDDL.form.appendChild(input);
    oDDL.onchange = function () {
        var index = this.selectedIndex;
        var text = (index >= 0) ? this.options[index].text : "";
        var inputName = this.name + "_text";
        var input = document.getElementById(inputName);
        input.value = text;
    };

    //populate initial text:
    oDDL.onchange();
}

这段代码基本上实现了this other answer中的第一个想法,并且只需要读取所选文本的select键和“_text”的请求值,例如:

string selectedText = Request.Form[m.ParentId + "_text"];

Live test case。 (仅限JavaScript方面)