Jak powiązać właściwość modelu widoku z inną nazwą
Czy istnieje sposób na odzwierciedlenie właściwości modelu widoku jako elementu o różnych nazwach i wartościach id na stronie HTML.
To jest główne pytanie, co chcę osiągnąć. Podstawowe wprowadzenie do pytania brzmi:
1- Mam model widoku (na przykład), który został utworzony dla operacji filtrowania po stronie widoku.
public class FilterViewModel
{
public string FilterParameter { get; set; }
}
2- Mam akcję kontrolera, która jest tworzona w celu GETINGU wartości formularza (tutaj jest to filtr)
public ActionResult Index(FilterViewModel filter)
{
return View();
}
3- Mam pogląd, że użytkownik może filtrować niektóre dane i przesyłać parametry poprzez querystring nad przesłaniem formularza.
@using (Html.BeginForm("Index", "Demo", FormMethod.Get))
{
@Html.LabelFor(model => model.FilterParameter)
@Html.EditorFor(model => model.FilterParameter)
<input type="submit" value="Do Filter" />
}
4- I co chcę zobaczyć w wynikach renderowanego widoku to
<form action="/Demo" method="get">
<label for="fp">FilterParameter</label>
<input id="fp" name="fp" type="text" />
<input type="submit" value="Do Filter" />
</form>
5- I jako rozwiązanie chcę zmodyfikować mój model widoku w następujący sposób:
public class FilterViewModel
{
[BindParameter("fp")]
[BindParameter("filter")] // this one extra alias
[BindParameter("param")] //this one extra alias
public string FilterParameter { get; set; }
}
Zatem podstawowe pytanie dotyczy BindAttribute, ale użycia właściwości typu złożonego. Ale także jeśli istnieje sposób na to, jest to znacznie lepsze. Wbudowane plusy:
1- Korzystanie z TextBoxFor, EditorFor, LabelFor i innych silnie typowanych pomocników modelu widoku może lepiej zrozumieć i komunikować się ze sobą.
2- Obsługa routingu URL
3- Brak ram przez tworzenie problemów:
Ogólnie rzecz biorąc, zalecamy, aby ludzie nie pisali niestandardowych segregatorów, ponieważ trudno jest je dobrać i są rzadko potrzebne. Problem, który omawiam w tym poście, może być jednym z tych przypadków, w których jest to uzasadnione.
A także po kilku badaniach znalazłem te przydatne prace:
Powiązanie właściwości modelu z inną nazwą
Jednoetapowa aktualizacja pierwszego łącza
Wynik: Ale żaden z nich nie daje mi dokładnych rozwiązań. Szukam silnie wpisanego rozwiązania tego problemu. Oczywiście, jeśli znasz inny sposób, podziel się.
Aktualizacja
Podstawowe powody, dla których chcę to zrobić, to zasadniczo:
1- Za każdym razem, gdy chcę zmienić nazwę kontrolki HTML, muszę zmienić nazwę właściwości w czasie kompilacji. (Istnieje różnica Zmiana nazwy właściwości między zmianą ciągu w kodzie)
2- Chcę ukryć (kamuflaż) prawdziwe nazwy nieruchomości od użytkowników końcowych. Większość razy Zobacz nazwy właściwości modelu takie same, jak nazwy właściwości obiektów obiektów zamapowanych. (Ze względów czytelności dla programistów)
3- Nie chcę usuwać czytelności dla programisty. Pomyśl o wielu właściwościach o długości 2-3 znaków i znaczeniach mo.
4- Jest wiele modeli widoków napisanych. Zmiana ich nazw zajmie więcej czasu niż to rozwiązanie.
5- To będzie lepsze rozwiązanie (w moim POV) niż inne, które do tej pory są opisane w innych pytaniach.