Дополнительные параметры для TextBoxFor () в ASP.net MVC3 - PullRequest
1 голос
/ 27 февраля 2012

Я использовал текстовое поле для выполнения следующих действий:

<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 (динамически). Я могу заставить его делать это статически легко, добавив значение disabled=true в new{}.

Я попробовал использовать это: @if (<condition>) { var disable = true; } @Html.TextBoxFor(m => model.value1, new { id = "blah", disabled = disable })

Но это тоже не сработало. Правильный ли я подход здесь?

Ответы [ 2 ]

3 голосов
/ 27 февраля 2012
@{
    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>)
2 голосов
/ 27 февраля 2012

У вас проблема с вышеприведенным отключением не существует вне области действия оператора if,

Моя рекомендация такова:

@Html.TextBoxFor(m => model.value1, new { id = "blah", disabled = (<condition>) })

РЕДАКТИРОВАТЬ:

Вы можете использовать

   @Html.TextBoxFor(m => model.value1, new { id = "blah", disabled = (<condition>) ? "disabled" : "" })

Если вы хотите вставить слово «отключено», а не «bool», из памяти это специфическая настройка браузера, некоторые довольны «истинными», другие - «отключенными»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...