0

我有一个Employee实体,我绑定到 MVC3/Razor 应用程序中的“编辑”视图。该Employee实体具有 的属性OccupationTypeIdOccupationTypeId指向OccupationType包含多个查找值的表。自然的选择是使用@Html.DropDownListFor来呈现<select>包含职业列表的标签。

OccupationType模式是相当标准的:Id, Name, Description, IsEnabled. 由于可以禁用 OccupationTypes,我希望OccupationTypeId下拉菜单仍然呈现禁用的选项,以便用户在禁用时始终可以看到他们的选择,但用户无法选择禁用的选项。换句话说,用户不能将现有选项更改OccupationTypeId为禁用选项。

我考虑创建一个@Html扩展方法来使用选项构建我的<select>标签,并简单地将disabled属性附加到禁用的选项。我认为这将是直截了当的...

但是,禁用的选定选项似乎不会回发到控制器方法。换句话说,Employee.OccupationTypeId当我发布到编辑时将为空。

有什么方法可以改变这种行为,或者它是内置在 MVC 3 中的吗?我考虑过使用隐藏字段,但是如果需要 OccupationTypeId 并且我启用了验证怎么办?

有没有其他人遇到过这个?

谢谢

4

2 回答 2

2

当下拉列表中发生更改事件时,您可能会有一个隐藏字段得到更新。这样该OccupationTypeId字段总是被传递。

<input name='CurrentOccupationId' type='hidden' value='@Model.Employee.OccupationTypeId' />

<script>
    $(function() {
        $('#dropDownId').change(function() {
            $('input[name="CurrentOccupationTypeId"]').val($(this).val());
        });
    });
</script>
于 2013-01-31T22:04:45.133 回答
0

有什么方法可以改变这种行为,或者它是内置在 MVC 3 中的吗?我考虑过使用隐藏字段,但是如果需要 OccupationTypeId 并且我启用了验证怎么办?

它与 MVC 3 无关。所有禁用的 html 元素通常不会回发。

我使用的解决方案是通过使用 CSS 设置适当元素的样式来“模拟”禁用元素。例如,您可以将元素的背景(或前景)颜色设置为灰色,并改为设置readonly属性(当它有意义时)。

看到这个类似的线程。

于 2013-01-31T22:20:23.057 回答