0

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

现在我在渲染禁用的 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" })
}
4

1 回答 1

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);
});
于 2013-08-21T13:48:30.133 回答