虽然问题始于MVC4,但我找到的答案更加通用,适用于JQuery,可以一般使用
如何只提取下拉列表(限制更改值),然后在提交的控制器上提供数据?
当我在编辑模式下显示for时,我想根据某些条件禁用特定的下拉列表。但是在提交时,我需要控制器中可用的数据,以便我可以直接使用该对象来使用EF进行更新。
如果我使用disabled属性,控制器将无法使用这些数据,我需要编写大量其他代码来获取属性或在更新时跳过该属性。
是否有可以轻松应用于所有屏幕的快速解决方法?
不,我不想禁用它并启用提交!
答案 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();