获取禁用降值倒在asp.net的MVC(Get value of disabled drop dow

2019-06-26 02:14发布

我有一个ASP.NET MVC应用程序。 我有我的网页(HTML SELECT)多重下拉列表中,我必须禁用它们,用户通过一个接着选择它们之一。 当用户发回控制器,我得到null作为功能(操作方法)paramters。 我搜索,发现HTML不在表单数据发送残疾人领域的价值。 与只读更换disabled属性是行不通的,因为它会使下拉工作。

我动态生成的下拉列表中的用户继续使用JavaScript。 因此,有没有一个单一的下拉列表中,但用户希望尽可能多的。

有人可以告诉我,我应该怎么获取值?

Answer 1:

一种可能性是使下拉列表中disabled="disabled" ,其中包括具有相同的名称和价值,这将使该值发送到服务器的隐藏字段:

@Html.DropDownListFor(x => x.FooId, Model.Foos, new { disabled = "disabled" })
@Html.HiddenFor(x => x.FooId)

如果您有与禁用JavaScript下拉动态然后只是简单地禁用后的下拉菜单,隐藏字段的当前选择的值分配。



Answer 2:

这是禁用的控件的默认行为。 我建议你添加一个隐藏字段,并设置你的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)


Answer 3:

您还可以创建它接受自己DropDownListFor超载bool disabled参数和做繁重的你,你的看法是不凌乱, if disablethisfield then ...

这些线路中的事情可以做:

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);
}

有6个重载DropDownListFor单独所以这是一个很大的monkeycoding,但它到底恕我直言不负有心人。



Answer 4:

之前提交调用$( '#FooId')。removeAttr( '已禁用')



文章来源: Get value of disabled drop down in asp.net mvc