Html 获取asp.net mvc中禁用下拉列表的值
我有一个ASP.NETMVC应用程序。我有多个下拉列表在我的网页(HTML选择),我必须禁用它们,因为用户继续选择他们一个接一个。当用户将其发回控制器时,作为函数(操作方法)参数,我将得到null。我搜索并发现HTML不发送表单数据中禁用字段的值。用readonly替换禁用的属性将不起作用,因为它会使下拉列表工作 随着用户的继续,我使用javascript动态生成下拉列表。所以这里并没有一个下拉列表,而是用户想要多少就有多少Html 获取asp.net mvc中禁用下拉列表的值,html,asp.net-mvc,post,drop-down-menu,Html,Asp.net Mvc,Post,Drop Down Menu,我有一个ASP.NETMVC应用程序。我有多个下拉列表在我的网页(HTML选择),我必须禁用它们,因为用户继续选择他们一个接一个。当用户将其发回控制器时,作为函数(操作方法)参数,我将得到null。我搜索并发现HTML不发送表单数据中禁用字段的值。用readonly替换禁用的属性将不起作用,因为它会使下拉列表工作 随着用户的继续,我使用javascript动态生成下拉列表。所以这里并没有一个下拉列表,而是用户想要多少就有多少 有人能告诉我如何获取值吗?一种可能是制作下拉列表disabled=“d
有人能告诉我如何获取值吗?一种可能是制作下拉列表
disabled=“disabled”
,并包含一个具有相同名称和值的隐藏字段,该字段将允许将此值发送到服务器:
@Html.DropDownListFor(x => x.FooId, Model.Foos, new { disabled = "disabled" })
@Html.HiddenFor(x => x.FooId)
如果必须使用javascript动态禁用下拉列表,则只需在禁用后将当前选定的下拉列表值分配给隐藏字段。这是禁用控件的默认行为。我建议您添加一个隐藏字段,并在这个隐藏字段中设置DropDownList的值,然后使用它 比如:
//just to create a interface for the user
@Html.DropDownList("categoryDump", (SeectList)ViewBag.Categories, new { disabled = "disabled" });
// it will be send to the post action
@Html.HiddenFor(x => x.CategoryID)
您还可以为重载创建自己的DropDownList,它接受一个
bool disabled
参数,并为您执行繁重的操作,这样您的视图就不会被弄乱。如果禁用此字段,则…
这些行中有一些可以做到:
public static MvcHtmlString DropDownListFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, IEnumerable<SelectListItem> selectList, bool disabled)
{
if (disabled)
return MvcHtmlString.Create(htmlHelper.HiddenFor(expression).ToString() + htmlHelper.DropDownListFor(expression, selectList, new { disabled="disabled" }).ToString());
else
return htmlHelper.DropDownListFor(expression, selectList);
}
public static MvcHtmlString DropDownListFor(此HtmlHelper HtmlHelper、表达式、IEnumerable selectList、bool已禁用)
{
如果(禁用)
返回MvcHtmlString.Create(htmlHelper.HiddenFor(expression.ToString()+htmlHelper.DropDownListFor(expression,selectList,new{disabled=“disabled”}).ToString());
其他的
返回htmlHelper.DropDownListFor(表达式,选择列表);
}
DropDownlostFor单独有6个重载,因此它需要大量的MonkeyCodeing,但最终会得到回报。在提交调用$('FooId')之前。removeAttr('disabled')使用指定Id创建一个隐藏字段,并在禁用下拉列表之前进行设置 在MVC中 在JQuery中
所选值将自动绑定到
Model.FooId
有人能解释为什么这个答案会被否决吗?如果你投了反对票,请给出一个理由。我认为,因为如果你在一个缓慢的环境中使用这个解决方案,用户将看到该下拉列表已启用。此外,用户现在可以编辑表单中的值并重新提交表单。
@Html.DropDownListFor(x => x.FooId, Model.Foos)
@Html.HiddenFor(x => x.FooId, new { @id = "hdnFooId" })
function handleDropDownListFooChange(){
// Get the selected value from drop-down-list before disabling it.
var selectedFooId = $('#FooId').val();
$('#FooId').prop("disabled", "disabled");
$("#hdnFooId").val(selectedFooId);
// Load any data the depends on selected FooId using `selectedFooId` variable.
}