Html MVC3/Razor-选择标记don';回邮

Html MVC3/Razor-选择标记don';回邮,html,asp.net-mvc,asp.net-mvc-3,razor,Html,Asp.net Mvc,Asp.net Mvc 3,Razor,我有一个Employee实体,我正在绑定到MVC3/Razor应用程序中的“编辑”视图。Employee实体具有职业类型ID的属性职业类型ID指向包含多个查找值的职业类型表。自然的选择是使用@Html.DropDownListFor呈现包含职业列表的标记 occuptiontype表模式相当标准:Id、Name、Description、IsEnabled。由于可以禁用OccupationTypes,因此我希望OccupationTypeId下拉列表仍然呈现禁用选项,以便用户在禁用时始终可以看到自

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

occuptiontype
表模式相当标准:
Id、Name、Description、IsEnabled
。由于可以禁用OccupationTypes,因此我希望
OccupationTypeId
下拉列表仍然呈现禁用选项,以便用户在禁用时始终可以看到自己的选择,但用户无法选择禁用的选项。换句话说,用户不能将现有的
职业类型ID
更改为禁用选项

我考虑创建一个
@Html
扩展方法来构建带有选项的
标记,并简单地将
disabled
属性附加到disabled options上。我想这是直截了当的

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

有没有办法改变这种行为,或者这是MVC3内置的?我考虑过使用隐藏字段,但如果需要OccupationTypeId,并且启用了验证,该怎么办

还有其他人面对过吗


感谢您,您可以在下拉列表中创建一个隐藏字段,在事件发生时更新该字段。通过这种方式,始终传递
职业类型ID
字段

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

<script>
    $(function() {
        $('#dropDownId').change(function() {
            $('input[name="CurrentOccupationTypeId"]').val($(this).val());
        });
    });
</script>

$(函数(){
$('#dropDownId').change(function(){
$('input[name=“CurrentOccupationTypeId”]').val($(this.val());
});
});
有没有办法改变这种行为,或者这是MVC3内置的? 我考虑过使用隐藏字段,但如果OccupationTypeId是 必需,并且我已启用验证

它与MVC3没有什么特别的关系;所有禁用的html元素通常不会发回

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


该行为不是内置于MVC3中,而是内置于浏览器发回表单的方式中。仅启用,表单控件才会被包含(即使如此,也不是所有控件都像复选框一样被包含)。下面的帖子将为您指明正确的方向:您是否尝试过只读?感谢您的快速回复。工作得很好。