J'utilise le rasoir MVC3, et j'essaie de passer un objet à une vue partielle, et cela ne fonctionne pas.
Cela fonctionne très bien sans envoyer le modèle d'objet à la vue partielle:
Html.RenderAction("Index", "ViewName");
Essayer cela n'envoie pas l'objet modèle, j'obtiens des valeurs nulles à la place (l'objet a des données et la vue les attend): '
Html.RenderAction("Index", "ViewName", objectModel);
Est-ce même possible en utilisant RenderAction?
Merci!
Edit: j'ai trouvé l'erreur, il y avait une erreur avec l'action du contrôleur qui n'a pas ramassé l'objet envoyé. Merci pour votre aide!
dites que vous voulez passer foo
comme modèle, faites-le d'abord
public class Foo {
public string Name { get; set; }
public int Age { get; set; }
}
faire maintenant un ActionResult
public ActionResult FooBar(Foo _foo){
return PartialView(_foo);
}
appeler
@Html.RenderAction("FooBar", "Controller", new { Name = "John", Age=20 });
Vous pouvez réellement passer un objet à une méthode de contrôleur en utilisant Action. Cela peut être fait sur n'importe quelle vue disponible, par exemple j'en ai une dans une bibliothèque partagée qui est construite dans des dossiers bin de projet qui référencent mon projet partagé (propriétés - Copier si plus récent sur le fichier de vue, dans Visual Studio). C'est fait comme ça:
Contrôleur:
public class GroovyController : Controller
{
public ActionResult MyTestView(MyModel m)
{
var viewPath = @"~\bin\CommonViews\MyTestView";
return View(viewPath, m);
}
}
page MVC (utilisant la syntaxe Razor):
@Html.Action("MyTestView", "Groovy", new { m = Model })
ou en utilisant la méthode RenderAction
:
@{ Html.RenderAction("MyTestAction", "MyTestController", new { area = "area", m = Model }); }
Remarque: dans la @Html.Action()
, l'objet Model
doit être de type MyModel
et ce 3e paramètre doit être défini sur le nom de la variable du contrôleur, dont le mien est MyModel m
. Le m
est ce que vous devez assigner, donc je fais m = Model
.
Habituellement, si j'ai un modèle déjà disponible, il est plus judicieux d'utiliser Html.Partial
que d'essayer de rendre une action.
@Html.Partial("Foo", Model.FooModel)
Où Foo.cshtml
est un fichier de vue (peut-être dans votre dossier partagé) fortement tapé avec @model FooProject.Models.FooModel
ou quel que soit le nom de votre modèle. Cela peut être un modèle aussi complexe que vous en avez besoin. Le modèle est le modèle principal de votre page dans lequel vous devez définir FooModel
- ou simplement omettre ce paramètre si la vue Foo
utilise le même modèle que la page parent.
RenderAction
est généralement meilleur lorsque vous n'avez que des paramètres simples, parce que vous simulez simplement une demande à une action régulière qui a des paramètres de chaîne de routage/requête - puis videz cette réponse dans votre page. Cela fonctionne bien si vous devez mettre quelque chose dans une mise en page qui n'est pas disponible dans le modèle de votre page, comme un élément dans une barre latérale.