Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html 获取asp.net mvc中禁用下拉列表的值_Html_Asp.net Mvc_Post_Drop Down Menu - Fatal编程技术网

Html 获取asp.net mvc中禁用下拉列表的值

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

我有一个ASP.NETMVC应用程序。我有多个下拉列表在我的网页(HTML选择),我必须禁用它们,因为用户继续选择他们一个接一个。当用户将其发回控制器时,作为函数(操作方法)参数,我将得到null。我搜索并发现HTML不发送表单数据中禁用字段的值。用readonly替换禁用的属性将不起作用,因为它会使下拉列表工作

随着用户的继续,我使用javascript动态生成下拉列表。所以这里并没有一个下拉列表,而是用户想要多少就有多少


有人能告诉我如何获取值吗?

一种可能是制作下拉列表
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.
}