我使用文本框执行以下操作:
<input style="width:50px;" type="text" id="blah" value="@model.value1" @if(model.id!=1){ <text>disabled</text>}/>
这基本上显示了在特定情况下被禁用的文本框。 我决定用更“友好的mvc”方式取代它。
@Html.TextBoxFor(m => model.value1, new { id = "blah" })
但不确定如何添加禁用属性(动态)我可以通过在disabled=true
中添加new{}
值来静态地执行此操作。
我确实试过用这个:
@if (<condition>) { var disable = true; }
@Html.TextBoxFor(m => model.value1, new { id = "blah", disabled = disable })
但这也行不通。我在这里采取了正确的方法吗?
答案 0 :(得分:3)
@{
var attributes = new Dictionary<string, object>
{
{ "id", "blah" }
};
if (<condition>)
{
attributes["disabled"] = "disabled";
}
}
@Html.TextBoxFor(m => model.value1, attributes)
显然,这很丑陋,你甚至不应该考虑污染你的观点。我只想编写一个自定义的可重用HTML帮助器:
public static class HtmlExtensions
{
public static IHtmlString MyTextBoxFor<TModel, TProperty>(
this HtmlHelper<TModel> htmlHelper,
Expression<Func<TModel, TProperty>> ex,
object htmlAttributes,
bool disabled
)
{
var attributes = new RouteValueDictionary(htmlAttributes);
if (disabled)
{
attributes["disabled"] = "disabled";
}
return htmlHelper.TextBoxFor(ex, attributes);
}
}
您可以在视图中使用简单如下:
@Html.MyTextBoxFor(m => model.value1, new { id = "blah" }, <condition>)
答案 1 :(得分:2)
你有一个范围问题,上面的禁用在if语句的范围之外不存在,
我的建议如下:
@Html.TextBoxFor(m => model.value1, new { id = "blah", disabled = (<condition>) })
编辑:
您可以使用
@Html.TextBoxFor(m => model.value1, new { id = "blah", disabled = (<condition>) ? "disabled" : "" })
如果你想插入禁用而不是bool这个词,那么从内存来看,这有点像浏览器特定设置,有些人对“真实”其他人“残疾”感到满意