Как заместить верхний регистр в Html.TextboxFor

Я хотел бы наложить верхний регистр на текстовое поле на мой взгляд. Поэтому, когда пользователь вводит что-то в текстовое поле, текст сразу преобразуется в верхнем регистре или (альтернативный вариант), текст преобразуется в верхнем регистре, когда форма отправляется, а модель заполняется данными (в контроллере действий). Возможно, есть некоторые решения 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 = > m.TechnologyID)

Как я могу продолжить?

Спасибо.

Ответ 1

Вы можете выполнить это преобразование на получателе свойства:

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;
        }
    }
}

Ответ 2

Самый простой способ - ИМО:

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

Ответ 3

Для редактора:

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

Ответ 4

Моя строка кода в представлении:

@Html.TextBoxFor(model = > model.BldgNameAbbv, new {onkeyup = "InputToUpper (this);" })

Связанный script:

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

Это сработало для меня. И использование TextBoxFor, а не EditorFor, было важно.

Ответ 5

Вы можете использовать text-transform: свойство uppercaase css. Если вы хотите сделать это из mvc, вы можете попробовать создать шаблон для текстового поля (где вы выводите ввод с классом css для верхнего регистра) и использовать атрибут UIHint в модели. Надеюсь, это поможет вам.

Ответ 6

Также см. это:

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

Ответ 7

Я посмотрел на изменение моего getter и установки в моей модели, но в моем случае я сначала использую DB, поэтому, если я вношу изменения в свою структуру db, мне пришлось бы каждый раз возвращать код getter и setter. Это будет трудно для нас в будущем.

Я попробовал;

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

но, как указано выше, это делает только капитал в представлении. Когда вы сохраняете его в БД, появляется информация о том, как когда-либо пользователь ввел его. (GIGO). Для нашего сайта мне тоже нужно иметь верхний регистр в БД. Итак, что я сделал для решения этой проблемы, было установить свойство моего объекта для себя вместе с .upper() в методе post action Ex:

[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 на переднем конце и установкой свойства в сообщении у меня есть верхние регистры как на лицевой, так и на обратной стороне.

Ответ 8

Если вы хотите просто запретить сохранение в БД в качестве нижнего регистра, то самым прямым вариантом является изменение значения в верхнем регистре во время HttpPost для создания и редактирования действий например.

[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();