只读下拉菜单

时间:2014-08-28 07:59:29

标签: c# javascript jquery asp.net-mvc-4

虽然问题始于MVC4,但我找到的答案更加通用,适用于JQuery,可以一般使用

如何只提取下拉列表(限制更改值),然后在提交的控制器上提供数据?

当我在编辑模式下显示for时,我想根据某些条件禁用特定的下拉列表。但是在提交时,我需要控制器中可用的数据,以便我可以直接使用该对象来使用EF进行更新。

如果我使用disabled属性,控制器将无法使用这些数据,我需要编写大量其他代码来获取属性或在更新时跳过该属性。

是否有可以轻松应用于所有屏幕的快速解决方法?

不,我不想禁用它并启用提交!

4 个答案:

答案 0 :(得分:1)

我不确定它是最好的解决方案,听起来像解决方法,但您可以在表单中添加隐藏的输入,其值等于从下拉列表中选择的项目(已禁用)。下拉将被禁用,当提交表单时,您可以获得控制器内隐藏输入的值。

答案 1 :(得分:1)

只需使用代码显示 @ntl 还回答了MVC中禁用下拉列表的解决方法:

型号:

Public int FooId {get;set;}

控制器:

@Html.DropDownListFor(x => x.FooId, Model.Foos, new { disabled = "disabled" })
@Html.HiddenFor(x => x.FooId)

如果您必须使用javascript动态禁用下拉列表,则只需在禁用后立即将当前选定的下拉列表值分配给隐藏字段。

现在,隐藏字段'FooId'将为您提供有关帖子控制器操作的选定下拉值。

答案 2 :(得分:0)

我建议不要依赖未被更改的数据。在将数据发送到浏览器并返回服务器后,数据不再可靠。它可以很容易地改变。

特别是当您直接更新数据库时,

答案 3 :(得分:0)

尝试做一点通用(不仅仅适用于MVC.NET)

$.fn.extend({
    readonlyddl: function () {
        if (this.is('[readonly]')) {
            //  save current value
            var val = this.val();
            //  remove any events that fire on change
            this.unbind("change");
            //reset the value when the select change
            this.change(function () {
                $(this).val(val);
            });
        }
    }
});

//  $("#ID").readonlyddl();