只读下拉列表,但仍提交它的值
我在ASP.NET MVC中使用Html.DropDownList助手,我想使它成为只读。不幸的是,我也需要它在表单上提交它的价值。只读下拉列表,但仍提交它的值
我发现(通过similar question on SO)使用下面的格式将使下拉为只读,但不会提供对控制器内控件值的访问。
Html.DropDownList("Types", Model.Types, new { @disabled = "disabled" })
有谁知道如何使下拉列表只读或禁用ASP.NET MVC,同时也允许它提交一个表单发布?
它是网络浏览器端的预期行为 - 禁用的控件在提交表单时不会将其数据发布到服务器。
您可以通过将一个隐藏字段在页面上与它的价值假的吧 - 只是一定要验证数据。或者在提交操作发生之前使用javascript来启用该字段。
如果你禁用一个领域,但仍表现出了一些值的页面就可以了,那么就必须让你知道该值,而无需从浏览器向服务器发回的方式。
一个很好的答案。 – 2014-04-04 17:41:20
@Prescott很好的答案 – User 2015-03-26 05:52:47
- 使它成为一个文本框来代替。
-
添加更改事件的JavaScript:
$('#dropdown').change(function(e) { e.preventDefault(); });
有1只在其项目的下拉列表。
- 有在它的下拉列表的实际值隐藏的项目,因此即使禁用下拉那岂不是被提交。
您可以启用它提交。下行:看起来很奇怪。
$(form).submit(function() {
$('#Types').removeAttr('disabled');
});
或在提交时将值复制到隐藏字段。
$(form).submit(function() {
$('#HiddenField').val($('#Types').val());
});
只是改变该项目的样式表。
visibility:"visible"
visibility:"hidden"
欲了解更多信息,请参阅http://support.microsoft.com/kb/199243。
你仍然会得到回发,但你也不会再看到它。
我认为最好的办法是通过
$.post(url,
{
AID: val1,
CID: val2
},
function (data) {
// act on model
}
);
这真是奇怪的将它张贴:我们一直在使用,你在你的问题包含的代码,它一直蛮好的我们,直到这个星期。我怀疑MVC 3的更新或我们最近添加的客户端验证功能。 – StriplingWarrior 2011-01-24 21:07:12