Użyłem następujących w moim MVC3 (aspx) .NETFramework 4.0 działa świetnie.SelectListItem/aktualizowanie formularza wniosku MVC3 4.0 do MVC5 4.5.1/metoda rozszerzania widoku
widok przedłużenie strona metoda:
public static List<SelectListItem> GetDropDownListItems<T>(this ViewPage<T> viewPage, string listName, int? currentValue, bool addBlank)
where T : class
{
List<SelectListItem> list = new List<SelectListItem>();
IEnumerable<KeyValuePair<int, string>> pairs = viewPage.ViewData[listName] as IEnumerable<KeyValuePair<int, string>>;
if (addBlank)
{
SelectListItem emptyItem = new SelectListItem();
list.Add(emptyItem);
}
foreach (KeyValuePair<int, string> pair in pairs)
{
SelectListItem item = new SelectListItem();
item.Text = pair.Value;
item.Value = pair.Key.ToString();
item.Selected = pair.Key == currentValue;
list.Add(item);
}
return list;
}
częściowy model:
public static Dictionary<int, string> DoYouSmokeNowValues = new Dictionary<int, string>()
{
{ 1, "Yes" },
{ 2, "No" },
{ 3, "Never" }
};
public static int MapDoYouSmokeNowValue (string value)
{
return (from v in DoYouSmokeNowValues
where v.Value == value
select v.Key).FirstOrDefault();
}
public static string MapDoYouSmokeNowValue (int? value)
{
return (from v in DoYouSmokeNowValues
where v.Key == value
select v.Value).FirstOrDefault();
}
public string DoYouSmokeNow
{
get
{
return MapDoYouSmokeNowValue(DoYouSmokeNowID);
}
set
{
DoYouSmokeNowID = MapDoYouSmokeNowValue(value);
}
}
W widoku:
@Html.ExDropDownList("DoYouSmokeNowID", this.GetDropDownListItems("DoYouSmokeNowValues", this.Model.PersonalSocial.DoYouSmokeNowID, false), this.isReadOnly)
Kiedy zaktualizowany wniosek do MVC5 .NETFramework 4.5.1. Po pierwsze nie mogłem rozwiązać GetDropDownListItems, więc skopiowałem go z modelu rozszerzenia do widoku przy użyciu @functions, pojawia się ten błąd.
The type argument for method 'IEnumerable<SelectedItem> ASP._Page_Views_Visit_PhysicalExam_cshtml.GetDropDownListItems<T>(ViewPage<T>, string,,int?,bool)' cannot be inferred from the usage. Try specifying the the type arguments explicity.
Jeszcze jedno rozwiązanie MVC3 był jeden projekt, a MVC5 jest wielowarstwowa i mam modeli w warstwie Domeny, natomiast rozszerzenie widok jest projekt jako poglądów.
Moje pytanie brzmi: dlaczego nie mogę rozwiązać metody rozszerzenia widoku strony?
Doceniam Twoje sugestie.
'metoda GetDropDownListItems' spodziewa 2 parametry' bool ?, bool 'ale twoje przejście trzy' string, bool ?, bool'. –
Masz rację Stephen, napisałem niewłaściwą metodę. Zaktualizowałem pytanie, podając więcej szczegółów dotyczących metody rozszerzenia widoku. – hncl
Czy komunikat o błędzie jest nadal taki sam? (to nie ma sensu). Moje pytanie brzmi: co to właściwie ma robić i co to jest '@ Html.ExDropDownList()'? Wygląda na to, że wszystko to można zrobić w zaledwie kilku liniach kodu, korzystając z wbudowanych metod MVC. –