2012-03-07 47 views
0

我目前正在开发ASP.NET MVC 3项目。我制作了一个自定义编辑器模板来显示百分比。这是我迄今为止的代码。Html属性中断编辑器模板,使其只读

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

的[百分比] attribue是一个正常的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="[email protected](fieldName)Up" class="magnaNumericButton button small"> 
        ˄</a> </li> 
       <li style="line-height: normal"><a id="[email protected](fieldName)Down" class="magnaNumericButton button small"> 
        ˅</a> </li> 
      </ul> 
     </div> 
    </div> 
    <script type="text/javascript"> 

     $("#[email protected](fieldName)Up").click(function() 
     { 
      ChangeNumericUpDownValue($('#[email protected](fieldName)'), 1); 
      return false; 
     }); 

     $("#[email protected](fieldName)Down").click(function() 
     { 
      ChangeNumericUpDownValue($('#[email protected](fieldName)'), -1); 
      return false; 
     }); 

     $('#[email protected](fieldName)').keypress(function (e) 
     { 
      NumericUpDownKeyPress($(this), e); 
      return false; 
     }); 

    </script> 

该编辑模板利用一个数字上下辊的,使得用户可以,如果他使用/她喜欢。用户也可以自己输入数字,而不使用数字向上功能。 JavaScript功能和一切工作完美一段时间,直到昨天。

现在的问题是,编辑器模板中的文本框不允许用户键入他/她自己的值(使其只读 - 尽管呈现的html中没有只读属性),只能通过数字向上键入纽扣。我已经决定,如果我从文本框中助手删除HTML属性,像这样:

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

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

感谢

+0

您为该字段生成ID的方式不正确。 'ViewData.TemplateInfo.HtmlFieldPrefix'是该字段的前缀(例如[Car.Window。< - HtmlPrefix] Color)。如果你想要一个Id或Name,你应该在模板 – 2012-03-07 13:47:29

回答

1

之所以出现这种情况是因为你是从你订阅的JavaScript事件keypress返回false:

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

这意味着,无论哪个密钥的用户类型时,文本框内部,你正在取消它。当你删除这些属性时,这个原因是因为没有你的文本框不再有正确的id,并且你的jquery选择器不匹配任何元素,所以它没有做任何事情来允许用户在文本框。所以如果你想让他打字,你不应该从.keypress()处理程序返回false。或者至少不是系统化 - >如果他输入一个数字,那么这个文本框中应该是唯一允许的字符。

+0

中使用'@ Html.NameForModel'和'@ Html.IdForModel'。我从来没有猜到,但现在一切都合情合理。我不知道为什么我把那里的回报放在第一位。 – jacqijvv 2012-03-07 14:02:48