Вопрос по html, razor, asp.net-mvc-3 – Как отключить кнопку более элегантно

18

У меня на одном из моих взглядов следующий код бритвы:

<code>@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" />
                }
</code>

Довольно грубо. По сути, я хочу отключить кнопку при определенных условиях, так как вы сможете работать с кодом. Что было бы более желательным способом сделать это?

Язык C # MVC 3.0 AnonyMouse
Что это за язык (кроме HTML)? Brendan Long
Да шаблон бритвы движок AnonyMouse
Этоrazor template engine который позволяет C # сценариев через@ префикс. Yogu
что может быть более желательным? Какие недостатки вы видите в своем решении? TMS

Ваш Ответ

6   ответов
4

<button type="submit" disabled="@(!item.PMApproved)"></button>
Красиво сделано .....
Единственное решение на этой странице, которое работает для меня в.Net Core 2.1
13

ориентированное на разметку, с помощью нового метода расширения:

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>
Отличное решение, которое действительно следует духу структуры. Убедитесь, что вы поместили метод в пространство имен, которое MVC может видеть.
2

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)
1
<button @(isEnabled ? null : "disabled")>Butt</button>
1

<input type="button" value="Reset" @{@((!item.PMApproved) ? null : new { disabled = "disabled" })}; />

Нет необходимости в этом раздутом коде, просто будьте проще :-)

15

if Заявление ближе к фактическому различию между двумя строками:

<input type="button" class="btnresetinvoice button" value="Reset"
       data-invoiceid="@item.InvoiceId"
       @{ if(item.PMApproved != true) { 
             @:disabled="disabled" 
        } }
/>
добавлять@: доdisabled пометить его как обычный текст.
Я пытаюсь использовать это в своем коде, но@: кажется, прячет} в моем коде, который вызывает ошибку синтаксиса какие-либо идеи по этому поводу?
Кажется, не принимает отключенную часть в операторе if. Там написано имя «отключено» не существует в текущем контексте AnonyMouse
@Mykroft Может быть, попробуйте поставить текст в отдельной строке? Или просто<% ... %> синтаксис вместо?
@AnonyMouse - Исправлено благодаря Йогу. В будущем вы должны включить язык в свой вопрос, чтобы людям не приходилось догадываться о синтаксисе.

Похожие вопросы