Как я могу передать параметры в частичное представление в 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);
}
685   3  

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

    Ничего не найдено.