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

Yea*_*Stu 13 asp.net-mvc drop-down-menu

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

我发现(通过SO上类似问题)使用下面的格式会使下拉列表只读,但它不会提供对控制器内控件值的访问.

Html.DropDownList("Types", Model.Types, new { @disabled = "disabled" })
Run Code Online (Sandbox Code Playgroud)

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

Pre*_*ott 20

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

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

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

  • 一个很好的答案. (2认同)

Jan*_*m B 10

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

$(form).submit(function() {
  $('#Types').removeAttr('disabled');
});
Run Code Online (Sandbox Code Playgroud)

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

$(form).submit(function() {
  $('#HiddenField').val($('#Types').val());
});
Run Code Online (Sandbox Code Playgroud)


Bur*_*urg 7

  1. 把它变成一个文本框.
  2. 使用JavaScript添加更改事件:

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

  3. 有一个下拉列表,其中只有一个项目.

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