我在ASP.NET MVC中使用Html.DropDownList帮助器,我想将其设为只读。不幸的是,我还需要它在表格帖子上提交它的价值。
我发现(通过similar question on SO)使用以下格式将下拉列表设为只读,但它不会提供对控制器内控件值的访问。
Html.DropDownList("Types", Model.Types, new { @disabled = "disabled" })
有没有人知道如何使用ASP.NET MVC将下拉列表设置为只读或禁用,同时还允许它使用表单发布?
答案 0 :(得分:20)
这是Web浏览器端的预期行为 - 在提交表单时,禁用的控件不会将其数据发布到服务器。
你可以通过在页面上放置一个带有值的隐藏字段来伪造它 - 只需确保验证数据。或者在提交操作发生之前使用javascript启用该字段。
如果你正在禁用一个字段,但仍然在页面上显示某个字段,那么必须有一种方法可以让你知道该值,而不必将其从浏览器发送回服务器。
答案 1 :(得分:10)
您可以在提交时启用它。缺点:看起来很奇怪。
$(form).submit(function() {
$('#Types').removeAttr('disabled');
});
或在提交时将值复制到隐藏字段中。
$(form).submit(function() {
$('#HiddenField').val($('#Types').val());
});
答案 2 :(得分:7)
使用JavaScript添加更改事件:
$('#dropdown').change(function(e) { e.preventDefault(); });
有一个只有1个项目的下拉列表。
答案 3 :(得分:1)
只需更改该项目的样式表即可。
visibility:"visible"
visibility:"hidden"
有关详细信息,请参阅http://support.microsoft.com/kb/199243。
你仍然可以获得回发,但你也不会再看到它了。
答案 4 :(得分:0)
我认为最好的解决方案是通过
发布$.post(url,
{
AID: val1,
CID: val2
},
function (data) {
// act on model
}
);