我正在开发一个网站,其中有几种情况下某些输入数据应该是可见的但是禁用了用户输入。由于禁用输入的数据不会发送回服务器,因此我总是添加一个隐藏的输入以发送回服务器。这样,数据就不会被空值覆盖。
现在渲染已禁用的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" })
}
答案 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);
});