Html 如何更优雅地禁用按钮
我对我的一个观点有以下代码:Html 如何更优雅地禁用按钮,html,asp.net-mvc-3,razor,Html,Asp.net Mvc 3,Razor,我对我的一个观点有以下代码: @if (item.PMApproved != true) { <input type="button" class="btnresetinvoice button" value="Reset" data-invoiceid="@item.InvoiceId" /> } else { <input type
@if (item.PMApproved != true) {
<input type="button" class="btnresetinvoice button" value="Reset" data-invoiceid="@item.InvoiceId" />
}
else {
<input type="button" class="btnresetinvoice button" value="Reset" data-invoiceid="@item.InvoiceId" disabled="disabled" />
}
@if(item.PMApproved!=true){
}
否则{
}
相当粗糙。基本上,我想在特定条件下禁用按钮,因为您可以从代码中计算出来。更理想的方法是什么?我不知道您使用的是哪种语言,但如果您的
语句更接近两行之间的实际差异,您可能可以移动:
<input type="button" class="btnresetinvoice button" value="Reset"
data-invoiceid="@item.InvoiceId"
@{ if(item.PMApproved != true) {
@:disabled="disabled"
} }
/>
助手可以帮助:
public static class HtmlExtensions
{
public static IHtmlString ApproveButton(this HtmlHelper htmlHelper, MyViewModel item)
{
var button = new TagBuilder("input");
button.Attributes["type"] = "button";
button.Attributes["value"] = "Reset";
button.AddCssClass("btnresetinvoice");
button.AddCssClass("button");
button.Attributes["data-invoiceid"] = item.InvoiceId.ToString();
if (item.PMApproved)
{
button.Attributes["disabled"] = "disabled";
}
return new HtmlString(button.ToString(TagRenderMode.SelfClosing));
}
}
然后:
@Html.ApproveButton(item)
试试这个
<button type="submit" disabled="@(!item.PMApproved)"></button>
不需要那些臃肿的代码,只需保持简单即可:-)一个以标记为中心的解决方案,由一种新的扩展方法辅助:
public static class HtmlExtensions
{
public static HtmlString DisabledIf(this HtmlHelper html, bool condition)
{
return new HtmlString(condition ? "disabled=\"disabled\"" : "");
}
}
在您的视图中,重用wazoo:
<button type="reset" @Html.DisabledIf(someCondition)>Clear Fields</button>
清除字段
良好的可重用性,并且呈现的标记在空白方面非常干净:
<button type="reset" disabled="disabled">Clear Fields</button>
清除字段
对接
可能的简便方法:
<input type="button" @(item.PMApproved ? "disabled" : "") />
使用asp.net mvc5 razor:
@if(condition)
{
<button data-toggle="collapse" data-target="#content">Details</button>
}
else
{
<button disabled>Details</button>
}
@if(条件)
{
细节
}
其他的
{
细节
}
它阻止尝试从DevTools启用按钮,因为razor对于DevTools不可见这是什么语言(除了HTML)?还有什么可能更可取?您在解决方案中看到了哪些缺陷?它允许通过@
前缀编写C#脚本。似乎不接受if语句中禁用的部分。它表示“disabled”名称在当前数据库中不存在context@AnonyMouse-多亏了瑜珈修好了。将来,你应该在你的问题中包含语言,这样人们就不必猜测语法。我试图在我的代码中使用这种语言,但@:
似乎在我的代码中隐藏了}
,这会导致语法错误。对此有什么想法吗?@Mykroft也许可以尝试将明文放在自己的行中?或者仅仅是
语法?我最后把放在了这里。改为写。没什么大不了的,但你可能想重新检查答案中的代码,并确保它与最后的/>
一起工作。这是一个真正符合框架精神的伟大解决方案。请确保将方法放在MVC可以看到的名称空间中。此页面上唯一适合我的解决方案是.Net Core 2.1
@if(condition)
{
<button data-toggle="collapse" data-target="#content">Details</button>
}
else
{
<button disabled>Details</button>
}