Udostępnij za pośrednictwem


MVC1004: zmiana nazwy parametru powiązanego modelu

Wartość
Identyfikator reguły MVC1004
Poprawka powodująca niezgodność lub niezgodność Kluczowa

Przyczyna

Parametr powiązany modelu ma taką samą nazwę jak jedna z jego właściwości.

Opis reguły

Powiązanie modelu złożonego parametru z właściwością o tej samej nazwie może spowodować nieoczekiwane zachowanie powiązania. Rozważ zmianę nazwy parametru lub użycie atrybutu powiązania w celu określenia innej nazwy.

Rozważ następujący kod:

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

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

W tym modelu parametr i jego właściwość mają nazwę Search, co powoduje, że powiązanie modelu próbuje powiązać właściwość jako search.Search. Nazewnictwo parametru i jego właściwości zapobiega powiązaniu z wartością bez prefiksu, takiego jak zapytanie, które wygląda następująco: ?search=MySearchTerm.

Jak naprawić naruszenia

  • Zmień nazwę parametru, jeśli jego prefiks nie jest używany podczas tworzenia powiązania:
public IActionResult Get(SearchModel model)
{
    ...
}

Zmiana nazwy parametru typu publicznego może być traktowana jako zmiana powodująca niezgodność, ponieważ zmienia publiczną powierzchnię interfejsu API biblioteki.

  • Jeśli jest to problematyczne, rozważ użycie atrybutu powiązania modelu, takiego jak Bind określenie prefiksu powiązania modelu:
public IActionResult Get([Bind(Prefix = "")] SearchModel search)
{
    ...
}

Kiedy pomijać ostrzeżenia

Ostrzeżenia można pominąć, jeśli zamierzasz użyć nazwy parametru jako prefiksu podczas tworzenia powiązania modelu.