下拉列表只读,但仍然提交其值

时间:2010-05-18 15:07:22

标签: asp.net-mvc drop-down-menu

我在ASP.NET MVC中使用Html.DropDownList帮助器,我想将其设为只读。不幸的是,我还需要它在表格帖子上提交它的价值。

我发现(通过similar question on SO)使用以下格式将下拉列表设为只读,但它不会提供对控制器内控件值的访问。

Html.DropDownList("Types", Model.Types, new { @disabled = "disabled" })

有没有人知道如何使用ASP.NET MVC将下拉列表设置为只读或禁用,同时还允许它使用表单发布?

5 个答案:

答案 0 :(得分:20)

这是Web浏览器端的预期行为 - 在提交表单时,禁用的控件不会将其数据发布到服务器。

你可以通过在页面上放置一个带有值的隐藏字段来伪造它 - 只需确保验证数据。或者在提交操作发生之前使用javascript启用该字段。

如果你正在禁用一个字段,但仍然在页面上显示某个字段,那么必须有一种方法可以让你知道该值,而不必将其从浏览器发送回服务器。

答案 1 :(得分:10)

您可以在提交时启用它。缺点:看起来很奇怪。

$(form).submit(function() {
  $('#Types').removeAttr('disabled');
});

或在提交时将值复制到隐藏字段中。

$(form).submit(function() {
  $('#HiddenField').val($('#Types').val());
});

答案 2 :(得分:7)

  1. 改为使其成为文本框。
  2. 使用JavaScript添加更改事件:

    $('#dropdown').change(function(e) { e.preventDefault(); });

  3. 有一个只有1个项目的下拉列表。

  4. 有一个隐藏项目,其中包含下拉列表的实际值,因此即使禁用的下拉列表没有提交也会提交。

答案 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
  }
);