Mam taki link:
<a href='Member/MemberHome/Profile/Id'><span>Profile</span></a>
a kiedy to kliknę, wywoła tę częściową stronę:
@{
switch ((string)ViewBag.Details)
{
case "Profile":
{
@Html.Partial("_Profile"); break;
}
}
}
Częściowa strona _Profile zawiera:
Html.Action("Action", "Controller", model.Paramter)
Przykład:
@Html.Action("MemberProfile", "Member", new { id=1 }) // id is always changing
Wątpię, jak mogę przekazać to „Id” do części model.parameter ?
Moimi kontrolerami są:
public ActionResult MemberHome(string id)
{
ViewBag.Details = id;
return View();
}
public ActionResult MemberProfile(int id = 0)
{
MemberData md = new Member().GetMemberProfile(id);
return PartialView("_ProfilePage",md);
}
Odpowiedzi:
Twoje pytanie jest trudne do zrozumienia, ale jeśli rozumiem sedno, po prostu masz pewną wartość w swoim głównym widoku, do której chcesz uzyskać dostęp w częściowym renderowaniu w tym widoku.
Jeśli renderujesz tylko część z tylko częściową nazwą:
W rzeczywistości przekaże Twój model jako niejawny parametr, tak samo jak w przypadku wywołania:
Teraz, aby Twoja cząstka faktycznie mogła z tego korzystać, musi mieć również zdefiniowany model, na przykład:
Alternatywnie, jeśli masz do czynienia z wartością, która nie znajduje się w modelu Twojego widoku (jest w ViewBag lub w jakiś sposób wygenerowana w samym widoku, możesz przekazać
ViewDataDictionary
I wtedy:
Podobnie jak w przypadku modelu, Razor domyślnie przekaże twoją częściową widok
ViewData
, więc jeśli maszViewBag.Id
w swoim widoku, możesz odwołać się do tego samego w części.źródło
@Html.Partial("_SomePartial", new Microsoft.AspNet.Mvc.ViewFeatures.ViewDataDictionary(this.ViewData) { { "id", someInteger } });
żeby to zadziałało dla mnie. Używam VS2015 DNX 4.5.1, jeśli ktoś ma ten sam problem.Jedną z najkrótszych metod, które znalazłem dla pojedynczej wartości, gdy szukałem siebie, jest po prostu przekazanie pojedynczego ciągu i ustawienie ciągu jako modelu w takim widoku.
Po twojej stronie częściowego wywoływania
A następnie powiązanie modelu z Partial View w ten sposób
i użycie jego wartości w widoku częściowym w ten sposób
Możesz także bawić się innymi typami danych, takimi jak tablica, int lub bardziej złożonymi typami danych, takimi jak IDictionary lub coś innego.
Mam nadzieję, że to pomoże,
źródło
NullReferenceException
, że odwołanie do obiektu nie jest ustawione na wystąpienie obiektu, mówi się, żeModel
jest null. Jakieś pomysły?Oto metoda rozszerzenia, która konwertuje obiekt na ViewDataDictionary.
Następnie możesz użyć go w swoim widoku w następujący sposób:
Co jest o wiele ładniejsze niż
new ViewDataDictionary { { "Property1", "Value1" } , { "Property2", "Value2" }}
składnia.Następnie w widoku częściowym możesz użyć,
ViewBag
aby uzyskać dostęp do właściwości z obiektu dynamicznego zamiast właściwości indeksowanych, npźródło
ToViewDataDictionary
statyczną metodę? Wszędzie, gdzie próbuję to umieścić, pojawia się jakiś błąd kompilatora.W przypadku Asp.Net core lepiej używać
Na przykład
źródło