Mam następujący model:RadioButtonFor nie wybierając wartość szablonów edytora
public class Person
{
public string Name { get; set; }
public string Gender { get; set; }
}
chcę domyślny płeć być kobietą, więc, że ustanowiony w akcji:
public ActionResult Create()
{
var model = new Person { Gender = "F" }; // default is female
return View(model);
}
Wreszcie, widok renderuje wszystko w następujący sposób:
@model Person
@using (Html.BeginForm())
{
@Html.EditorForModel()
<p><input type="submit" value="Create" /></p>
}
Wszystko działa zgodnie z oczekiwaniami. Teraz powiedzmy, że zamiast prostego pola tekstowego, chcę wyświetlić płeć jako bardziej intuicyjną parę przycisków radiowych. Więc robię następujący szablon i zapisać go do shared/EditorTemplates/Gender.cshtml:
@model string
@Html.RadioButtonFor(model => model, "F") Female
@Html.RadioButtonFor(model => model, "M") Male
końcu udekorować Płeć z [UIHint("Gender")]
.
płeć jest teraz prawidłowo wykonane z przycisków radiowych, co jest dobre, ale ...
Problem
Kobieta nie jest wstępnie wybrany jako wartości domyślnej i zamiast ja skończyć z dwa puste przyciski radiowe. Czy czegoś brakuje?
Co ciekawe, jeśli przeniesię RadioButtonFor
z szablonu do widoku (zmieniając model => model
na model => model.Gender
), wszystko działa zgodnie z oczekiwaniami. Wiem, że jest to wykonalne obejście, ale te szablony są tak niesamowitą, uzależniającą wygodą, że wolałbym wyczerpać wszystkie możliwości, zanim wypuszczę je.
+1 i odpowiedź. Pracował uczta! To nie jest tak brzydkie. Jeśli cokolwiek, wolę żyć z "brzydotą", jeśli uda mi się zachować moje '@ Html.EditorForModels()' s Dzięki!:) –
Zgadzam się, że to nie jest brzydkie i działało na urok. – danludwig
Wziąłem ten pomysł i rozszerzyłem go. Przekazuję ciąg> do mojego szablonu edytora, dodając ViewData, którego używam do tworzenia przycisków radiowych. Mój szablon wygląda tak: –
davidbitton