Tengo un enlace como este:
<a href='Member/MemberHome/Profile/Id'><span>Profile</span></a>
y cuando hago clic en esto, llamará a esta página parcial:
@{
switch ((string)ViewBag.Details)
{
case "Profile":
{
@Html.Partial("_Profile"); break;
}
}
}
Página parcial _Perfil contiene:
Html.Action("Action", "Controller", model.Paramter)
Ejemplo:
@Html.Action("MemberProfile", "Member", new { id=1 }) // id is always changing
Mi duda es que, ¿cómo puedo pasar este "Id" a la parte model.parameter ?
Mis controladores son:
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);
}
Respuestas:
Su pregunta es difícil de entender, pero si estoy entendiendo la esencia, simplemente tiene algún valor en su vista principal al que desea acceder en una representación parcial en esa vista.
Si solo representa un parcial con solo el nombre parcial:
En realidad, pasará su modelo como un parámetro implícito, igual que si llamara:
Ahora, para que su parcial pueda usar esto, también necesita tener un modelo definido, por ejemplo:
Alternativamente, si está tratando con un valor que no está en el modelo de su vista (está en ViewBag o un valor generado en la vista de alguna manera, entonces puede pasar un
ViewDataDictionary
Y entonces:
Al igual que con el modelo, Razor pasará implícitamente su vista parcial de
ViewData
forma predeterminada, por lo que si teníaViewBag.Id
en su vista, puede hacer referencia a lo mismo en su parcial.fuente
@Html.Partial("_SomePartial", new Microsoft.AspNet.Mvc.ViewFeatures.ViewDataDictionary(this.ViewData) { { "id", someInteger } });
para que esto funcionara para mí. Estoy usando VS2015 DNX 4.5.1 si alguien más tiene este mismo problema.Uno de los métodos más cortos que encontré para un valor único mientras me buscaba es simplemente pasar una sola cadena y establecer una cadena como modelo a la vista de esta manera.
En su lado de llamada parcial
Y luego vinculando el modelo con Vista parcial como esta
y el uso de su valor en Vista parcial como este
También puedes jugar con otros tipos de datos como array, int o tipos de datos más complejos como IDictionary u otra cosa.
Espero eso ayude,
fuente
NullReferenceException
referencia de objeto no establecida en una instancia de un objeto, está diciendo queModel
es nulo. ¿Algunas ideas?Aquí hay un método de extensión que convertirá un objeto en ViewDataDictionary.
Luego puede usarlo en su vista así:
Lo cual es mucho mejor que la
new ViewDataDictionary { { "Property1", "Value1" } , { "Property2", "Value2" }}
sintaxis.Luego, en su vista parcial, puede usar
ViewBag
para acceder a las propiedades desde un objeto dinámico en lugar de propiedades indexadas, por ejemplofuente
ToViewDataDictionary
método estático? En todas partes donde trato de ponerlo me sale algún tipo de error del compilador.Para Asp.Net core es mejor usar
Así por ejemplo
fuente