Share via


MVC1004: Cambiar el nombre del parámetro enlazado al modelo

Valor
Identificador de la regla MVC1004
La corrección es problemática o no problemática Problemático

Causa

Un parámetro enlazado al modelo tiene el mismo nombre que una de sus propiedades.

Descripción de la regla

El enlace de modelos de un parámetro complejo con una propiedad que tiene el mismo nombre puede dar lugar a un comportamiento de enlace inesperado. Considere la posibilidad de cambiar el nombre del parámetro o usar un atributo de enlace para especificar un nombre diferente.

Observe el código siguiente:

public class HomeController : Controller
{
    public IActionResult Get(SearchModel search)
    {
        ...
    }
}

public class SearcModel
{
    public string Search { get; set; }
}

En este modelo, el parámetro y su propiedad se denominan Search, lo que da como resultado que el enlace de modelos intente enlazar la propiedad como search.Search. Asignar el mismo nombre a un parámetro y su propiedad impide el enlace a un valor sin prefijo, como una consulta similar a ?search=MySearchTerm.

Cómo corregir infracciones

  • Cambie el nombre del parámetro si no se usa su prefijo durante el enlace:
public IActionResult Get(SearchModel model)
{
    ...
}

Cambiar el nombre de un parámetro en un tipo público podría considerarse un cambio importante, ya que cambia la superficie de la API pública de una biblioteca.

  • Si esto es problemático, considere la posibilidad de usar un atributo de enlace de modelos, como Bind, para especificar el prefijo de enlace de modelos:
public IActionResult Get([Bind(Prefix = "")] SearchModel search)
{
    ...
}

Cuándo suprimir las advertencias

Las advertencias se pueden suprimir si piensa usar el nombre del parámetro como prefijo durante el enlace del modelo.