Megosztás a következőn keresztül:


MVC1004: Modellhez kötött paraméter átnevezése

Érték
Szabályazonosító MVC1004
A javítás törést okoz vagy nem okoz törést Rendkívüli hírek

Oka

A modellhez kötött paraméterek neve megegyezik az egyik tulajdonságával.

Szabály leírása

Az azonos nevű tulajdonsággal rendelkező összetett paraméter modellezése váratlan kötési viselkedést eredményezhet. Fontolja meg a paraméter átnevezését, vagy egy kötési attribútum használatával adjon meg egy másik nevet.

Vegye figyelembe a következő kódot:

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

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

Ebben a modellben a paraméter és a tulajdonság neve is el van nevezveSearch, ami azt eredményezi, hogy a modellkötés megkísérli a tulajdonság kötését.search.Search Ha egy paraméternek és annak tulajdonságának ugyanaz a neve, az megakadályozza, hogy előtag nélkül lehessen kötni egy értékhez, például egy olyan lekérdezésben, mint amilyen a ?search=MySearchTerm.

Szabálysértések kijavítása

  • Nevezze át a paramétert, ha az előtagját nem használja a kötés során:
public IActionResult Get(SearchModel model)
{
    ...
}

Egy paraméter átnevezése nyilvános típuson kompatibilitástörő változásnak tekinthető, mivel megváltoztatja a tár nyilvános API-felületét.

  • Ha ez problémás, fontolja meg egy modellkötési attribútum használatát, például Bind a modellkötés előtagjának megadását:
public IActionResult Get([Bind(Prefix = "")] SearchModel search)
{
    ...
}

Mikor kell letiltani a figyelmeztetéseket?

A figyelmeztetések mellőzhetők, ha a paraméternevet előtagként szeretné használni a modellkötés során.