如何在Html.TextboxFor上强制大写

时间:2011-11-06 10:12:24

标签: asp.net-mvc

我想在视图中强制显示文本框上的大写字母。因此,当用户在文本框中键入内容时,文本会立即转换为大写或(替代)文本在提交表单时以大写形式转换,并且模型使用数据填充(在操作控制器中)。也许有一些CSS或jquery解决方案,但我更喜欢一些MVC解决方案(如果可能的话)。

以下是我的观点:

@model Domain.Entities.ProjectTechnology

<script src="../../Scripts/Admin/_AddProjectTechnology.js" type="text/javascript"></script>

<div class="editor-label">Technologies</div>    

<div class="editor-field">

    @using (Ajax.BeginForm("_AddProjectTechnology", new AjaxOptions { HttpMethod = "POST",
                                                                  UpdateTargetId = "RemoveProjectTechnology",
                                                                  InsertionMode = InsertionMode.Replace,
                                                                  OnComplete = "AddProjectTechnologyCompleted" })) {    
        @Html.ValidationSummary(true)
        @Html.HiddenFor(m => m.ProjectID)
        @Html.EditorFor(m => m.TechnologyID)
        @Html.ValidationMessageFor(m => m.TechnologyID)          
    }
</div>

这是我的模特:

public class ProjectTechnology
{
    public int     ProjectID   { get; set; }
    public string  TechnologyID    { get; set; }
}

有问题的文本框是这一行: @ Html.EditorFor(m =&gt; m.TechnologyID)

我该怎么办?

感谢。

8 个答案:

答案 0 :(得分:16)

最简单的方法是IMO:

@Html.EditorFor(m => m.TechnologyID, new { htmlAttributes = new { @style = "text-transform:uppercase" } })

答案 1 :(得分:6)

对于EditorFor:

@Html.EditorFor(model => 
    model.Nome, 
    new { 
        htmlAttributes = new { 
            @class = "form-control", 
            @onkeyup = "InputToUpper(this);"
        } 
    }
)

答案 2 :(得分:4)

您可以在属性的getter上执行此转换:

public class ProjectTechnology
{
    public int ProjectID { get; set; }

    private string _technologyId;
    public string TechnologyID 
    {
        get 
        {
            if (string.IsNullOrEmpty(_technologyId))
            {
                return _technologyId;
            }
            return _technologyId.ToUpper();
        }
        set
        {
            _technologyId = value;
        }
    }
}

答案 3 :(得分:4)

视图中的代码行是:

@ Html.TextBoxFor(model =&gt; model.BldgNameAbbv,new {onkeyup =&#34; InputToUpper(this);&#34;})

关联的脚本是:

<script>
function InputToUpper(obj)
{
    if (obj.value!="")
    {
    obj.value = obj.value.toUpperCase();
    }
}
</script>

这对我有用。使用TextBoxFor而不是EditorFor是必不可少的。

答案 4 :(得分:3)

您可以使用text-transform:uppercaase css属性。如果要从mvc创建此文件,可以尝试为textbox创建模板(在其中输出带有大写的css类的输入)并在模型中使用UIHint属性。希望这能帮助你。

答案 5 :(得分:1)

另见:

@Html.EditorFor(m => m.TechnologyID, 
      new { @class = "whatever-class",  
      @style = "text-transform:uppercase"})

答案 6 :(得分:1)

我看着在我的模型中更改我的getter和settter但是在我的情况下我首先使用DB,所以如果我更改我的db结构,我将不得不每次都放回getter和setter代码。这将是我们未来难以管理的。

我试过了;

@Html.EditorFor(m => m.Lname, 
  new { @class = "whatever-class",  
  @style = "text-transform:uppercase"})

但如上所述,这只会使它成为View的首选。当您将其保存到数据库时,数据会显示用户输入的数据。(GIGO)对于我们的网站,我也需要它在数据库中也是大写的。所以我为解决这个问题所做的就是在post动作方法Ex:

上设置我的对象的属性和.upper()。
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit([Bind(Include = "Recid,FName,LName")] UserModel change)
    {
        change.LName = change.LName.ToUpper();
        change.FName = change.FName.ToUpper();
        .... //code to update table
    }

因此结合前端的CSS样式并在帖子中设置属性我在前端和后端都有大写。

答案 7 :(得分:1)

如果您只想阻止以小写形式保存到数据库,那么最直接的选项是在创建和编辑操作的HttpPost期间将值更改为大写 e.g。

[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create([Bind("ProjectID, TechnologyID ")] ProjectTechnology projectTechnology)
    {
        ProjectTechnology.TechnologyID = ProjectTechnology.TechnologyID.ToUpper();

        if (ModelState.IsValid)
        {
            _context.Add(person);
            await _context.SaveChangesAsync();