Атрибуты HTML разбивают шаблон редактора, делая его доступным только для чтения - PullRequest
0 голосов
/ 07 марта 2012

В настоящее время я работаю над проектом ASP.NET MVC 3.Я сделал собственный шаблон редактора для отображения процентов.Вот код, который у меня есть.

public class MyClass
{
   // The datatype can be decimal or double
   [Percentage]
   public double MyPercentage { get; set; }
}

Атрибут [Percentage] - это обычный атрибут HI Hint, который использует следующий код:

    @model Object
    @{
        string fieldName = ViewData.TemplateInfo.HtmlFieldPrefix;
    }

    <div style="height: 24px;">
        <div style="float: left;">
          @Html.TextBox("", String.Format("{0:0.00}", Model), new
          {
              id = "txt" + fieldName,
              @Class = "magnaNumericTextBox",
              type = "magnaNumericType",
              style = "width:230px"
          })
          &nbsp;%
        </div>
        <div style="float: left;">
            <ul style="height: 24px; list-style: none; padding: 0px; margin: 0px; line-height: none;">
                <li style="line-height: normal"><a id="btn@(fieldName)Up" class="magnaNumericButton button small">
                    ˄</a> </li>
                <li style="line-height: normal"><a id="btn@(fieldName)Down" class="magnaNumericButton button small">
                    ˅</a> </li>
            </ul>
        </div>
    </div>
    <script type="text/javascript">

        $("#btn@(fieldName)Up").click(function ()
        {
            ChangeNumericUpDownValue($('#txt@(fieldName)'), 1);
            return false;
        });

        $("#btn@(fieldName)Down").click(function ()
        {
            ChangeNumericUpDownValue($('#txt@(fieldName)'), -1);
            return false;
        });

        $('#txt@(fieldName)').keypress(function (e)
        {
            NumericUpDownKeyPress($(this), e);
            return false;
        });

    </script>

Этот шаблон редактора используетчисловой валик вверх-вниз, который пользователь может использовать, если пожелает.Пользователь также может просто набрать номер самостоятельно, не используя функциональность «вверх-вниз».Функциональность javascript и все прекрасно работали некоторое время до вчерашнего дня.

Проблема теперь в том, что текстовое поле в шаблоне редактора не позволяет пользователю вводить его / ее собственное значение (делая его доступным только для чтения - хотя естьнет атрибута только для чтения в визуализированном html), только с помощью цифровых кнопок вверх-вниз.Я определил, что, если я удаляю атрибуты html из помощника текстового поля следующим образом:

  @Html.TextBox("", String.Format("{0:0.00}", Model))

, что пользователь может снова добавить значение, введя его в текстовое поле.Что это может быть?Любая помощь или совет будут оценены.

Спасибо

1 Ответ

1 голос
/ 07 марта 2012

Причина, по которой это происходит, заключается в том, что вы возвращаете false из события javascript keypress, на которое вы подписались:

$('#txt@(fieldName)').keypress(function (e) {
    NumericUpDownKeyPress($(this), e);
    return false; // <- here you are blocking all keys
});

Это означает, что независимо от того, какой ключ пользователь вводит в текстовом поле,отменяем это.И причина, по которой это работает, когда вы удаляете атрибуты, заключается в том, что ваше текстовое поле больше не имеет правильного идентификатора, а ваш селектор jquery не соответствует никаким элементам, и поэтому он ничего не делает для того, чтобы пользователь мог печатать что-либо втекстовое окно.Поэтому, если вы хотите разрешить ему печатать, вы не должны возвращать false из обработчика .keypress().Или, по крайней мере, систематически -> вы можете вернуть true, например, если он введет число, которое должно быть единственным разрешенным символом в этом текстовом поле.

...