0

我目前正在开发一个 ASP.NET MVC 3 项目。我制作了一个自定义编辑器模板来显示百分比。这是我到目前为止的代码。

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

[Percentage] 属性是使用以下代码的普通 UI 提示属性:

    @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))

用户可以通过在文本框中输入值再次添加该值。这可能是什么?任何帮助或建议将不胜感激。

谢谢

4

1 回答 1

1

发生这种情况的原因是因为您从keypress订阅的 javascript 事件中返回 false:

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

这意味着无论用户在文本框内键入哪个键,您都在取消它。当您删除属性时这样做的原因是因为您的文本框不再具有正确的 id,并且您的 jquery 选择器不匹配任何元素,因此它不执行任何操作,允许用户在文本框。因此,如果您想允许他打字,则不应从.keypress()处理程序返回 false。或者至少不是系统地 -> 例如,如果他键入一个应该是此文本框中唯一允许的字符的数字,您可以返回 true。

于 2012-03-07T13:44:40.047 回答