使用MVC Html.DropDownList时,我需要设置什么选项才能只读下拉框?
我尝试过像......
Html.DropDownList("Types", Model.Types, new { _Enabled = "false" })
......以及沿着这条线的许多不同的事情;唉,没有快乐!
我认为这会很容易.....而且可能就是这样!
答案 0 :(得分:126)
试试这个
Html.DropDownList("Types", Model.Types, new { @disabled = "disabled" })
答案 1 :(得分:72)
关于渔获22:
如果我们使用@disabled
,则该字段不会发送到该操作(Mamoud)
如果我们使用@readonly
,下拉错误仍然允许您更改值
解决方法:使用@disabled
,并在下拉列表后添加隐藏的字段:
@Html.HiddenFor(model => model.xxxxxxxx)
然后它被真正禁用,并发送给行动。
答案 2 :(得分:5)
<script type="text/javascript">
$(function () {
$(document) .ajaxStart(function () {
$("#dropdownID").attr("disabled", "disabled");
})
.ajaxStop(function () {
$("#dropdownID").removeAttr("disabled");
});
});
</script>
答案 3 :(得分:3)
或者您可以尝试这样的事情:
Html.DropDownList("Types", Model.Types, new { @readonly = "true" })
答案 4 :(得分:3)
我必须禁用下拉列表并隐藏主ID
<div class="form-group">
@Html.LabelFor(model => model.OBJ_ID, "Objs", htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownList("OBJ_ID", null, htmlAttributes: new { @class = "form-control", @disabled = "disabled"})
@Html.HiddenFor(m => m.OBJ_ID)
@Html.ValidationMessageFor(model => model.OBJ_ID, "", new { @class = "text-danger" })
</div>
</div>
答案 5 :(得分:2)
把它放在风格
select[readonly] option, select[readonly] optgroup {
display: none;
}
答案 6 :(得分:2)
一些提示可能对某些人而言是显而易见的而不是其他人。
如果您使用的是基于DropDownListFor
的HTML帮助程序,那么您的ID将在HiddenFor
输入中重复显示。因此,您将拥有在HTML中无效的重复ID,如果您使用javascript填充HiddenFor
和DropDownList
,那么您将遇到问题。
解决方案是在htmlattributes数组中手动设置ID属性...
@Html.HiddenFor(model => model.Entity)
@Html.EnumDropDownListFor(
model => model.Entity,
new {
@class = "form-control sharp",
onchange = "",
id =` "EntityDD",
disabled = "disabled"
}
)
答案 7 :(得分:1)
我这样做并称之为
Model.Id > -1 ? Html.EnumDropDownListFor(m => m.Property, new { disabled = "disabled" }) : Html.EnumDropDownListFor(m => m.Property)
答案 8 :(得分:0)
@Html.DropDownList("Types", Model.Types, new { @disabled = "" })
作品
答案 9 :(得分:0)
Html.DropDownList(&#34; Types&#34;,Model.Types,new {@disabled =&#34; disabled&#34;}) @ Html.Hidden(Model.Types) 并且要保存和恢复数据,请使用隐藏控件
答案 10 :(得分:0)
为了完整性,这里是DropDownListFor的HTML Helper,当禁用false select时,它会添加启用的参数。它保留了在标记中定义的html属性,或者它允许在标记中使用html属性,它将选择值发布到服务器并且使用非常简洁。
以下是帮助程序的代码:
public static MvcHtmlString DropDownListFor<TModel, TProperty>(this HtmlHelper<TModel> html, Expression<Func<TModel, TProperty>> expression, IEnumerable<SelectListItem> selectList, object htmlAttributes, bool enabled)
{
if (enabled)
{
return SelectExtensions.DropDownListFor<TModel, TProperty>(html, expression, selectList, htmlAttributes);
}
var htmlAttributesAsDict = HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes);
htmlAttributesAsDict.Add("disabled", "disabled");
string selectClientId = html.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldId(ExpressionHelper.GetExpressionText(expression));
htmlAttributesAsDict.Add("id", selectClientId + "_disabled");
var hiddenFieldMarkup = html.HiddenFor<TModel, TProperty>(expression);
var selectMarkup = SelectExtensions.DropDownListFor<TModel, TProperty>(html, expression, selectList, htmlAttributesAsDict);
return MvcHtmlString.Create(selectMarkup.ToString() + Environment.NewLine + hiddenFieldMarkup.ToString());
}
和用法,目标是禁用select如果选项中只有一个项目,标记:
@Html.DropDownListFor(m => m.SomeValue, Model.SomeList, new { @class = "some-class" }, Model.SomeList > 1)
还有一个更优雅的HTML Helper示例,现在没有帖子支持(相当直接的工作,只需使用HAP并添加隐藏的输入作为根元素兄弟和交换ID&#39; s):
public static MvcHtmlString Disable(this MvcHtmlString previous, bool disabled, bool disableChildren = false)
{
if (disabled)
{
var canBeDisabled = new HashSet<string> { "button", "command", "fieldset", "input", "keygen", "optgroup", "option", "select", "textarea" };
var doc = new HtmlDocument();
doc.LoadHtml(previous.ToString());
var rootElements = doc.DocumentNode.Descendants().Where(
hn => hn.NodeType == HtmlNodeType.Element &&
canBeDisabled.Contains(hn.Name.ToLower()) &&
(disableChildren || hn.ParentNode.NodeType == HtmlNodeType.Document));
foreach (var element in rootElements)
{
element.SetAttributeValue("disabled", "");
}
string html = doc.DocumentNode.OuterHtml;
return MvcHtmlString.Create(html);
}
return previous;
}
例如,有一个模型属性bool AllInputsDisabled,当为true时,应禁用所有html输入:
@Html.TextBoxFor(m => m.Address, new { placeholder = "Enter address" }).Disable(Model.AllInputsDisabled)
@Html.DropDownListFor(m => m.DoYou, Model.YesNoList).Disable(Model.AllInputsDisabled)
答案 11 :(得分:0)
尝试使用@disabled和jquery,这样就可以在Controller上获取值。
Html.DropDownList("Types", Model.Types, new {@class = "your_class disabled", @disabled= "disabled" })
添加一个名为“ disabled”的类,这样您就可以通过搜索该类来启用它(如果存在多个禁用字段),然后在不通过验证属性输入控制器的情况下可以使用“ setTimeout”
<script>
function clickSubmit() {
$("select.disabled").attr("disabled", false);
setTimeout(function () {
$("select.disabled").attr("disabled", true);
}, 500);
}
</script>
这样的提交按钮。
<button type="submit" value="Submit" onclick="clickSubmit();">Save</button>
在输入的情况下,只需使用@ readonly =“ readonly”
@Html.TextBoxFor("Types",Model.Types, new { @class = "form-control", @readonly= "readonly" })
答案 12 :(得分:-1)
我在提到上述所有评论之后创建了这个答案&amp;答案。 这将解决下拉群体错误,即使它被禁用。
第01步
Html.DropDownList("Types", Model.Types, new {@readonly="readonly"})
&#13;
第02步 这是css pointerevent删除代码。
<style type="text/css">
#Types {
pointer-events:none;
}
</style>
&#13;
经测试&amp;证明
答案 13 :(得分:-1)
您可以使用这种方法
禁用除所选选项之外的所有选项:
<select>
<option disabled>1</option>
<option disabled>2</option>
<option selected>3</option>
</select>
通过这种方式,下拉列表仍会提交,但用户无法选择其他值。
使用jQuery
<script>
$(document).ready(function () {
$('#yourSelectId option:not(:selected)').prop("disabled", true);
});
</script>