2010-09-21 16 views
1

c'est mon renderparialEnvoi d'un objet inconnu à un RenderPartial dans MVC

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<dynamic>" %> 
<a href='<%= Url.Action("Edit", new {id=Model.ID}) %>'> 
        <img src="<%= Url.Content("~/img/pencil.png") %>" alt="Edit" width="16" /></a> 

Je veux essentiellement l'appeler ainsi:

<% Html.RenderPartial("edit", new { ID = item.hlpb_ID }); %> 

cependant, cela me donne une erreur d'exécution 'object' does not contain a definition for 'ID'

alors comment envoyer un objet sans nom créé à la volée (parce que je suppose que c'est ce que c'est) à un rendupartial? comme ceci fonctionne pour Url.Action

+0

Demandez votre note de côté dans une autre question. C'est une bonne question. – jfar

+0

voici l'autre question: http://stackoverflow.com/questions/3761497/renderpartial-in-subfolder-of-shared-folder-how-to-make-mvc-find-it – Stefanvds

Répondre

1

Vous pouvez seulement appeler les membres d'un objet directement lorsque vous utilisez une vue fortement typée.

Si vous souhaitez transmettre un objet dynamique à un RenderPartial, vous devez utiliser la réflexion ou le mot clé dynamique pour accéder aux propriétés que vous ne connaissez pas lors de l'exécution. Faire cela est une très mauvaise pratique. Généralement, vous savez quels objets sont transmis à une vue car vous devez les restituer.

Pour plus d'informations sur la façon d'utiliser le contrôle dynamique de mots clés ici:

http://weblogs.asp.net/shijuvarghese/archive/2010/02/03/asp-net-mvc-view-model-object-using-c-4-dynamic-and-expandoobject.aspx

+0

alors comment une classe fortement typée Regardez et comment je l'utiliser, je dois être en mesure d'envoyer un ID et des paramètres facultatifs pour Url.Action. – Stefanvds

+0

http://nerddinner.codeplex.com/ a de bons exemples. – jfar

1

S'il est toujours un ID que vous croiserez, pourquoi ne pas mettre à jour que votre vue partielle d'accepter Nullable<int> au lieu par exemple

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<int?>" %> 
<a href='<%= Url.Action("Edit", new {id=Model}) %>'> 
    <img src="<%= Url.Content("~/img/pencil.png") %>" alt="Edit" width="16" /> 
</a> 

Ensuite, votre action Edit dans le contrôleur ressemblerait à quelque chose comme:

public ActionResult Edit(int? id) 
{ 
    if (id.HasValue) 
     // do something with id 
    else 
     // do something when no id supplied 
} 

tentative de transmission dans un objet dynamique semble inutile si elle est juste l'ID que vous êtes intéressé par Si vous avez d'autres. informations que vous devez utiliser à partir de l'objet, vous devriez considérer une classe personnalisée ViewData que vous pouvez remplir et passer dans la vue à la place.

+0

ce n'est pas toujours l'ID. Fondamentalement, je dois être en mesure d'envoyer les choses que j'utilise dans Url.Action. c'est un identifiant et des paramètres optionnels. – Stefanvds

+0

Votre avis devrait connaître votre modèle, donc mon conseil serait d'avoir une classe 'ViewData' personnalisée pour cette vue particulière avec toutes les propriétés pertinentes. – James