将禁用的列表框数据发送到服务器

时间:2013-08-21 12:06:41

标签: asp.net-mvc razor

我正在开发一个网站,其中有几种情况下某些输入数据应该是可见的但是禁用了用户输入。由于禁用输入的数据不会发送回服务器,因此我总是添加一个隐藏的输入以发送回服务器。这样,数据就不会被空值覆盖。

现在渲染已禁用的ListBox时出现问题。目前我渲染了一个为用户隐藏的ListBox的副本。有没有更好的方法来获得相同的结果?

代码说明:

@*Works fine*@
@if (Model.OnEdit)
{
  @Html.HiddenFor(x => x.Contract)
  @Html.DropDownListFor(x => x.Contract, 
                        Model.ContractList, 
                        new { disabled = "disabled" })
}

@if (Model.OnEdit)
{
  @*Otherwise the items will be updated to null*@
  @Html.ListBoxFor(x => x.Items, 
                   Model.ItemList, 
                   new { @class = "hidden" })
  @Html.ListBoxFor(x => x.Items, 
                   Model.ItemList, 
                   new { disabled = "disabled" })
}

1 个答案:

答案 0 :(得分:0)

稍微退一步:

这不是输入的常见用例,因为禁用的输入被视为没有被用户更改,因此通常不想将其数据发送到服务器。

首先,你应该仔细考虑“为什么你的不同?”并且“它应该​​完全不同吗?”。 如果数据与原来的相同,那么为什么我们需要它呢?

答案:

没有使用javascript就没有更好的方法来发送这些数据。

如果您的动态表单具有复杂的客户端行为,那么我将使用javascript并从禁用的输入中收集数据:

var listData = $('#ContractList').find(":selected").val();
var data = $('#form').serialize();
data.ContractList = listData;
$.post('ajax/test.html', data, function(result) {
    $('.result').html(result);
});