【问题标题】:submit disabled dropdown mvc c#提交禁用的下拉mvc c#
【发布时间】:2017-09-11 09:15:08
【问题描述】:

我想提交一个已禁用的下拉值:

查看:

@Html.DropDownFor(model => model.Type_Id, Model.TypeDropDown)
@Html.HiddenFor(m => m.Type_Id)

Javascript:

$("#Type_Id").val("67").change();
document.getElementById("Type_Id").disabled = true;
$('#Type_Id').val(67);

但我的值没有传递给 c# 控制器。

【问题讨论】:

  • 你在那里做表单提交吗? disabled 属性不会发布相应的 DDL,请改用 visibility: hidden$('#element').hide()
  • 但我想在禁用下拉菜单中显示一个固定值。

标签: javascript c# model-view-controller controller views


【解决方案1】:

一旦您禁用下拉菜单,它就不会提交它的值,因此您需要存储您的值。

见:Disable Dropdown

使用带有名称参数的 hiddenfor 来存储值。

【讨论】:

  • 但我想在禁用下拉菜单中显示一个固定值。
【解决方案2】:

使用隐藏字段来存储禁用下拉列表的值。在您的代码中,您必须手动设置同一表单内的隐藏字段的值,然后再将其发布到控制器,如下所示。您必须在模型中添加“Type_id_hidden”属性才能访问控制器中的值。

@Html.Hidden("Type_id_hidden")

但是在您的代码中,您在隐藏字段和下拉列表中使用了相同的 id。在发布到控制器之前设置隐藏字段

var selectedVal = $("#Type_Id").val();
$("#Type_id_hidden").val(selectedVal);

【讨论】:

  • 我不明白。我需要在我的模型中添加新属性吗?长 Type_id_hidden ?我的隐藏字段需要与下拉列表具有相同的 ID?
  • 在你的模型中添加一个新属性int Type_id_hidden,这是你在控制器中绑定的。在您的代码中,您的隐藏字段和下拉列表具有相同的 ID,因此当您使用 jquery 设置值时,它会变得混乱,并且隐藏字段值永远不会发送到控制器
  • 你应该有隐藏字段的唯一ID和使用jquery的下拉菜单
  • 我对您的解决方案还有其他问题。我使用自动映射器来映射我的字段。它可以安全地将我的实体映射到新的字段 ID?
  • 不确定 automapper 是否有其他配置,但一般来说,如果您有一个与 UI 和模型中名称相同的属性,它们在模型绑定期间默认绑定。自动映射器完成模型绑定后,您可以在模型类中将“Type_id_hidden”的值分配给“Type_Id”。
【解决方案3】:

使用与下拉列表具有相同值的附加隐藏字段来提交值,并让下拉列表仅用于显示值。

您不能提交已禁用字段的值。

【讨论】:

  • 我该怎么做?可以举例吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-22
  • 2023-03-14
  • 1970-01-01
  • 2021-05-13
相关资源
最近更新 更多