我有一个ASP.NET MVC应用程序。 我有我的网页(HTML SELECT)多重下拉列表中,我必须禁用它们,用户通过一个接着选择它们之一。 当用户发回控制器,我得到null作为功能(操作方法)paramters。 我搜索,发现HTML不在表单数据发送残疾人领域的价值。 与只读更换disabled属性是行不通的,因为它会使下拉工作。
我动态生成的下拉列表中的用户继续使用JavaScript。 因此,有没有一个单一的下拉列表中,但用户希望尽可能多的。
有人可以告诉我,我应该怎么获取值?
我有一个ASP.NET MVC应用程序。 我有我的网页(HTML SELECT)多重下拉列表中,我必须禁用它们,用户通过一个接着选择它们之一。 当用户发回控制器,我得到null作为功能(操作方法)paramters。 我搜索,发现HTML不在表单数据发送残疾人领域的价值。 与只读更换disabled属性是行不通的,因为它会使下拉工作。
我动态生成的下拉列表中的用户继续使用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)
您还可以创建它接受自己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,但它到底恕我直言不负有心人。
之前提交调用$( '#FooId')。removeAttr( '已禁用')