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