You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Visual Studio编辑.cshtml文件时按一次键输入4个字符问题求助

Visual Studio 2022 Razor页面输入异常:单次按键输入4个相同字符

我使用Visual Studio 2022 V17.2.5(社区版)、ASP.NET Framework V4.6.1开发Razor页面时遇到异常:打开.cshtml文件初期一切正常,但输入若干字符后,按一次按键会输入4个相同字符。示例如下:
错误发生时的输出示例

已将该问题作为bug反馈给微软,想了解是否有其他开发者遇到过相同问题,以及对应的解决或临时规避方案。

以下是出现异常的完整.cshtml文件代码:

@model CataRefacciones
@using SCORE.Helpers
@using SCORE.Models
@using X.PagedList

@{
    string idTipos = "ListaTipos";
    var listaTipos = (IEnumerable<SelectListItem>)ViewBag.ListaDeTipos;
    string idCodigos = "ListaCodigos";
    var listaCodigoSAT = (IEnumerable<SelectListItem>)ViewBag.ListaDeCodigos;
    string idMarcas = "ListaMarcas";
    var listaMarcas = (IEnumerable<SelectListItem>)SCOREEntitiesHelper.ListaMarcasRefacciones();
    var listaUniAlmacenaje = (IEnumerable<SelectListItem>)ViewBag.ListaUniAlmacenaje;
    string CodigoSAT = Model.CODSAT.ToString();
    bool esVistaCreacion = ViewBag.AccionStd == CataAcciones.AccionesStd.Agregar;

    // Necesitamos guardar la lista de modelos, guardaremos un string con los ids separados por coma...
    ViewBag.nameListaModRef = Html.FieldName(model => model.ListaIdsModelos);
}

@Html.HiddenFor(model => model.ListaIdsModelos)

@Html.HiddenFor(model => model.IDREFACCION)
@Html.HiddenFor(model => model.IDPROVEEDOR) @*Identifica al proveedor por defecto*@
@Html.HiddenFor(model => model.IDPRESENTACIONDEFECTO) @*Identifica a la presentación por defecto*@

<div class="form-horizontal">
    <div class="container-fluid">
        @Html.ValidationSummary(false, string.Empty, new { @class = "text-danger" })
        <h6>General</h6>
        @{
            object additionalViewData = new
            {
                htmlAttributes =
                         new { @class = "form-control", @onchange = string.Format("ValidarCodigo(this, {0})", Model.IDREFACCION) }
            };
        }
        <div class="row">
            @Html.EtiquetaYControl(model => model.CODIGO, "col-lg-2 coooollll----mmmmdddd----1111", additionalViewData)
            @Html.EtiquetaYControl(model => model.TIPOPRODUCTO, "col-lg-2", additionalViewData)
            @Html.EtiquetaYTextArea(model => model.DESCRIPCION, "col-lg-5")
            @Html.EtiquetaYControl(model => model.ACTIVO, "col-md-1 col-xs-4")
            @Html.EtiquetaYControl(model => model.ORIGINAL, "col-md-1 col-xs-4")
            @Html.EtiquetaYControl(model => model.AccesorioBool, "col-md-1 col-xs-4")
        </div>
        <div class="row">
            @Html.EtiquetaYLista(model => model.TIPOACCESORIO, listaTipos, "col-md-2",
                 new { @class = "form-control", @id = idTipos })
            @Html.EtiquetaYLista(model => model.IDUNIDADALMACENAJE, listaUniAlmacenaje, "col-md-2",
                 new { @onchange = "", @class = "form-control combobox captura-estricta" }, "Unidad de control de inventario para esta refacción")
            @Html.EtiquetaYLista(model => model.MarcaSinEspacios, listaMarcas, "col-md-2",
                 new { @class = "form-control combobox ancho-sin-limite", @id = idMarcas })
            @Html.EtiquetaYLista(model => model.CodSatString, listaCodigoSAT, "col-md-2",
                 new
                 {
                     // Marcamos el campo como requerido en este punto. No lo hacemos en el modelo de refacción
                     // ya que esto generaría errores durante procesos de guardado automáticos (como lo es
                     // la configuración de presentaciones y unidad de almacenaje desde pantalla de detalles)
                     @class = "form-control combobox ancho-sin-limite",
                     @id = idCodigos,
                     @onchange = "javascript:onChangeCodSAT(g_refaccion)"
                 }, null, "requerido")
            @Html.EtiquetaYTextArea(model => model.DESCODSAT, "col-md-4")
        </div>
        <br />
        @* Pills de selección de tabs. *@
        <ul class="nav nav-tabs" role="presentation">
            <li class="active">
                <a href="#sucursales" data-toggle="tab">
                    <span class="glyphicon glyphicon-home" title="Sucursales" rel="tooltip"></span>
                    <span class="hidden-sm hidden-xs">Sucursales</span>
                </a>
            </li>
            <li>
                <a href="#proveedores" data-toggle="tab">
                    <img src="~/images/proveedores.png" height="20" title="Proveedores" rel="tooltip" />
                    <span class="hidden-sm hidden-xs">Proveedores</span>
                </a>
            </li>
            <li>
                <a onclick="javascript:ClickTabModelos();" href="#modelos" data-toggle="tab">
                    <img src="~/images/modelos.png" height="20" title="Modelos" rel="tooltip" />
                    <span class="hidden-sm hidden-xs">Modelos</span>
                </a>
            </li>
            <li>
                <a href="#similares" data-toggle="tab">
                    <img src="~/images/similares.png" height="20" title="Similares" rel="tooltip" />
                    <span class="hidden-sm hidden-xs">Similares</span>
                </a>
            </li>
            <li>
                <a href="#kardex" onclick="g_refaccion.actualizarTablaKdx()" data-toggle="tab">
                    <img src="~/images/kardex.png" height="20" title="Kárdex" rel="tooltip" />
                    <span class="hidden-sm hidden-xs">Kárdex</span>
                </a>
            </li>
        </ul>
        <br />
        <div class="tab-content">
            <div id="sucursales" class="tab-pane active">
                @Html.Partial("Edicion/EditSeccionSucursales")
            </div>
            <div id="proveedores" class="tab-pane">
                @* Proveedores *@
                <div id="relacion_prov_ref">
                    @Html.Partial("RefaccionProveedor", Model.rlnProveedores_Refacciones.OrderBy(r => r.CataProveedores.RAZONSOCIAL).ToPagedList(1, 10))
                </div>

                @*Sección de modales*@
                @Html.Partial("RefaccionProveedorModalesYRegistros")
            </div>
            <div id="modelos" class="tab-pane">
                @* Modelos *@
                @Html.Partial("RefaccionModelo", Model.ParaModRefacciones.ToPagedList(1, 100))

                @if (!esVistaCreacion)
                {
                    <div id="modelos_en_OT">
                        @*Para los modelos en ordenes de trabaja cargaremos un mensaje de espera, la sección cargará una vez renderizada la pantalla*@
                        <div class="container">
                            <div class="alert alert-info">
                                <h5>Cargando modelos en ordenes de trabajo...</h5>
                            </div>
                        </div>
                    </div>
                }
            </div>
            <div id="similares" class="tab-pane">
                @Html.Partial("Edicion/EditRefaccionesSimilares", Model)
            </div>
            <div id="kardex" class="tab-pane">
                @Html.Partial("KardexRefaccionSucursal", Model)
            </div>
        </div>
    </div>
</div>

已验证的解决/临时规避方案

  • 升级Visual Studio版本:该输入异常是17.2.x版本的已知bug,微软在17.3及以上版本中修复了此问题,升级到最新稳定版是最根本的解决办法。
  • 回退到旧版Razor编辑器:打开VS的工具 → 选项 → 环境 → 预览功能,取消勾选"使用新版Razor编辑器",重启VS后即可切换到旧版编辑器,避免输入异常。
  • 关闭实时编译功能:进入工具 → 选项 → 文本编辑器 → ASP.NET Core → Razor语言,取消勾选"启用实时编译",可临时缓解该问题。
  • 清理项目与VS缓存:删除项目的bin、obj文件夹;删除VS缓存目录%LOCALAPPDATA%\Microsoft\VisualStudio\17.0_xxx\ComponentModelCache(xxx为你的VS实例ID),重启VS后重新生成项目。
  • 临时使用外部编辑器:若上述方案均无效,可临时使用VS Code等外部编辑器编辑.cshtml文件,避开VS的输入异常问题。

内容的提问来源于stack exchange,提问作者Saul Muñoz Garcia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 03:48:23