ASP.NET MVC - Problème de passage de modèle dans Html.ActionLink routeValues
Mon point de Vue, ressemble à ceci:
<%@ Control Language="C#"
Inherits="System.Web.Mvc.ViewUserControl<TMS.MVC.BusinessSystemsSupport.Models.SearchDataTypeModel>" %>
<table class="classQueryResultsTable">
<!-- the header -->
<tr class="headerRow">
<td>
<%= Html.ActionLink("Effective Startdate",
"SortDetails",
"DataQryUpdate",
new
{
model = Model,
sortBy = "EffectiveStartDate",
},
new { @class = "classLinkLogDetails" })%>
</td>
</tr>
</table>
Mon contrôleur de l'action:
public ActionResult SortDetails(SearchDataTypeModel model, String sortBy)
{
Le modèle paramètre est null. Le sortBy paramètre est remplie. Je peux passer dans une propriété de Chaîne à partir du modèle de l'action sans problème. Je veux passer dans l'ensemble du modèle.
Les idées de ce que je fais mal?
source d'informationauteur Jeff
Vous devez vous connecter pour publier un commentaire.
Une autre option est de persister les données dont vous avez besoin dans TempData. Cela permettra de remettre à la prochaine demande, et vous pouvez le récupérer. Vous devriez être en mesure de conserver l'intégralité de l'objet du modèle si vous le souhaitez.
Mais il est plus facile (et plus pratique) afin de récupérer uniquement à partir de la base de données, comme Darin suggère.
Vous ne pouvez pas passer des objets complexes:
model = Model
n'a pas de sens et ne peuvent pas être envoyés à l'aide de GET. Vous pourriez avoir besoin d'utiliser un formulaire avec un éditeur de modèle et/ou de champs cachés pour envoyer toutes les propriétés du modèle. Rappelez-vous que seulement les valeurs scalaires peuvent être envoyés dans la chaîne de requête (cle1=valeur1&cle2=valeur2...). Une autre solution qui vient à l'esprit est à envoyer uniquement l'ID:et dans les actions de votre contrôleur de récupérer le modèle donné ce code d'identification de votre banque de données:
Bien sûr, cela est vrai uniquement si l'utilisateur n'est pas censé modifier les propriétés du modèle dans un formulaire. Dépend de votre scénario.
Et par souci d'exhaustivité, permettez-moi d'exposer une autre option: utiliser le Html.Sérialiser aide MVC Futures pour sérialiser l'ensemble du modèle dans un champ caché qui pourrait être transmis à l'action du contrôleur et désérialisé.
Il y a une autre façon de passer du modèle ou des objets complexes et plus précisément dans ActionLink comme RouteValues.
MODÈLE: Rendre statique Sérialiser et Désérialiser des méthodes dans la classe comme
VUE: Maintenant convertir votre objet complexe à chaîne JSON avant de passer à l'Action Vue
CONTRÔLEUR: Obtenir l'objet en tant que chaîne de caractères dans une méthode d'Action et de la convertir vers l'objet avant de l'utiliser
C'Est Tout...
Remarque: Techniques abordées dans d'autres réponses sont assez bien dans le cas de Modèle, Mais parfois vous avez besoin de passer un certain complexe de l'objet (autre que le modèle de base de données) vers le contrôleur, comme je l'ai tel cas particulier.
Espère que cela aidera certains...:)
Vous auriez à sérialiser l'objet. L'url devrait obtenir laide et qui risquent de le devenir à long terme.
C'est un peu près ce que tu cherchais.
J'ai utiliser les paramètres personnalisés sont conservés uniquement à l'intérieur d'un contrôleur.
Facile à entretenir et ils sont très typés. Je n'aime pas variable entre guillemets.
Si j'utilise ces dans la soumission d'un formulaire alors tout est bon.
Si je utiliser de l'Html.ActionLink alors il n'worky.
Fondamentalement, l'Url doit ressembler à quelque chose comme ceci
?catid.Valeur=31f1a21a-9546-4f2f-8c26-a0273d11b233
Le travail est assez simple, car je me souviens encore de la façon d'écrire manuellement un html Une balise.
Pas tous, mais certains de Html helpers sont comme une plume vous transporter dans votre poche automatiquement les signes que votre nom si vous n'avez pas à déplacer votre poignet. Si, pour une raison quelconque, le pen un jour ne fonctionne pas il suffit de prendre un stylo normal et déplacez votre poignet de sorte que vous pouvez les signer de votre nom et de progresser.
Jeff,
Vous pourriez peut-être créer une Vue de la classe qui possède les propriétés SearchDataTypeModel et sortby et vous passez à la vue. Lorsque vous cliquez sur le actionlink passer juste le Modèle.SearchDataTypeModel. HTH
Peut-être que c'est trop tard. A obtenu une solution. Quelque chose de semblable à cette.
Voici mon exemple.
Url de la génération de code:
Contrôleur de code:
Filtre de classe d'objet: