Как я могу передать параметры в частичное представление в mvc 4
у меня есть такая ссылка:
<a href='Member/MemberHome/Profile/Id'><span>Profile</span></a>
и когда я нажму на это, он вызовет эту частичную страницу:
@{
switch ((string)ViewBag.Details)
{
case "Profile":
{
@Html.Partial("_Profile"); break;
}
}
}
частичная страница _Profile содержит:
Html.Action("Action", "Controller", model.Paramter)
пример:
@Html.Action("MemberProfile", "Member", new { id=1 }) // id is always changing
Я сомневаюсь, что как я могу передайте этот" идентификатор " модели.частью параметр?
мои контроллеры:
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);
}
3 ответов:
Ваш вопрос трудно понять, но если я получаю суть, у вас просто есть некоторое значение в вашем основном представлении, которое вы хотите получить в частичном отображении в этом представлении.
если вы просто визуализируете частичное только с частичным именем:
@Html.Partial("_SomePartial")он фактически передаст вашу модель в качестве неявного параметра, так же, как если бы вы должны были вызвать:
@Html.Partial("_SomePartial", Model)теперь, для того, чтобы ваш частичный действительно мог использовать это, хотя, он тоже должен есть определенная модель, например:
@model Namespace.To.Your.Model @Html.Action("MemberProfile", "Member", new { id = Model.Id })в качестве альтернативы, если вы имеете дело со значением, которое не находится в модели вашего представления (это в ViewBag или значение, сгенерированное в самом представлении, то вы можете передать
ViewDataDictionary@Html.Partial("_SomePartial", new ViewDataDictionary { { "id", someInteger } });и затем:
@Html.Action("MemberProfile", "Member", new { id = ViewData["id"] })как и в случае с моделью, Razor неявно передаст ваш частичный вид
ViewDataпо умолчанию, так что если у васViewBag.Idна ваш взгляд, то вы можете ссылаться на то же самое в вашем частичном.
один из самых коротких методов, который я нашел для одного значения, пока я искал себя, просто передает одну строку и устанавливает строку как модель в виде этого.
В вашей частичной вызывающей стороне
@Html.Partial("ParitalAction", "String data to pass to partial")а затем привязка модели с частичным видом, как это
@model stringи использование его значения в частичном виде, как это
@Modelвы также можете играть с другими типами данных, такими как массив, int или более сложные типы данных, такие как Класс IDictionary или что-то еще.
надеюсь, это поможет,
вот метод расширения, который преобразует объект в ViewDataDictionary.
public static ViewDataDictionary ToViewDataDictionary(this object values) { var dictionary = new ViewDataDictionary(); foreach (PropertyDescriptor property in TypeDescriptor.GetProperties(values)) { dictionary.Add(property.Name, property.GetValue(values)); } return dictionary; }затем вы можете использовать его в своем представлении следующим образом:
@Html.Partial("_MyPartial", new { Property1 = "Value1", Property2 = "Value2" }.ToViewDataDictionary())что гораздо приятнее, чем
new ViewDataDictionary { { "Property1", "Value1" } , { "Property2", "Value2" }}синтаксис.тогда в вашем частичный вид, вы можете использовать
ViewBagдля доступа к свойствам из динамического объекта, а не индексированных свойств, например<p>@ViewBag.Property1</p> <p>@ViewBag.Property2</p>
Comments