Eu tenho um link como este:
<a href='Member/MemberHome/Profile/Id'><span>Profile</span></a>
e quando eu clicar nele, ele chamará esta página parcial:
@{
switch ((string)ViewBag.Details)
{
case "Profile":
{
@Html.Partial("_Profile"); break;
}
}
}
A página parcial _Profile contém:
Html.Action("Action", "Controller", model.Paramter)
Exemplo:
@Html.Action("MemberProfile", "Member", new { id=1 }) // id is always changing
A minha dúvida é que como posso passar esse "Id" para a parte model.parameter ?
Meus controladores são:
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);
}
Respostas:
Sua pergunta é difícil de entender, mas se eu estou entendendo a essência, você simplesmente tem algum valor em sua visão principal que deseja acessar de forma parcial nessa visão.
Se você apenas tornar um parcial apenas com o nome parcial:
Na verdade, ele passará seu modelo como um parâmetro implícito, o mesmo que se você chamasse:
Agora, para que seu parcial possa realmente usar isso, ele também precisa ter um modelo definido, por exemplo:
Como alternativa, se você estiver lidando com um valor que não está no modelo da sua visualização (está no ViewBag ou um valor gerado na própria visualização de alguma forma, poderá passar um
ViewDataDictionary
E depois:
Assim como no modelo, o Razor passa implicitamente a sua parcial pela visualização
ViewData
por padrão; portanto, se você tiverViewBag.Id
na sua visualização, poderá fazer referência à mesma coisa na sua parcial.fonte
@Html.Partial("_SomePartial", new Microsoft.AspNet.Mvc.ViewFeatures.ViewDataDictionary(this.ViewData) { { "id", someInteger } });
para isso funcionar para mim. Estou usando o VS2015 DNX 4.5.1 se mais alguém tiver esse mesmo problema.Um dos métodos mais curtos que encontrei para um valor único enquanto procurava por mim mesmo é apenas passar uma única string e defini-la como modelo em vista como esta.
No seu lado de chamada parcial
E depois vincular o modelo à Vista Parcial como esta
e usando seu valor na Vista Parcial como esta
Você também pode jogar com outros tipos de dados, como array, int ou tipos de dados mais complexos, como IDictionary ou outra coisa.
Espero que ajude,
fonte
NullReferenceException
referência de objeto não definida para uma instância de um objeto, está dizendo queModel
é nulo. Alguma ideia?Aqui está um método de extensão que converterá um objeto em um ViewDataDictionary.
Você pode usá-lo em sua exibição da seguinte maneira:
O que é muito melhor do que a
new ViewDataDictionary { { "Property1", "Value1" } , { "Property2", "Value2" }}
sintaxe.Em sua visão parcial, você pode usar
ViewBag
para acessar as propriedades de um objeto dinâmico, em vez de propriedades indexadas, por exemplofonte
ToViewDataDictionary
método estático? Em todo lugar que tento colocar, recebo algum tipo de erro do compilador.Para o núcleo do Asp.Net, é melhor usar
Então por exemplo
fonte