html.TextBoxFor et html.Zone de texte, l'Affichage des valeurs, le modèle dans les paramètres
Bien les gars, Besoin d'aide!
Je travaille avec asp.net mvc3 de rasoir (et je suis assez nouveau pour elle, mais fait beaucoup de formulaires web)
Ok, donc, sur le problème
Ma question tourne autour de la soumission d'un point de vue.
J'ai un modèle compliqué que de mon point de vue est basé sur (fortement typé).
Je veux retourner le modèle dans les arguments de la HttpPost méthode du contrôleur. faites essentiellement à:
public ActionResult Personal()
{
DataModel dataModel = new DataModel();
FormModel model = new FormModel();
model.candidateModel = dataModel.candidateModel;
model.lookupModel = new LookupModel();
return View(model);
}
[HttpPost]
public ActionResult Personal(FormModel formModel)
{
if (ModelState.IsValid)
{
//stuff
}
return View(formModel);
}
Maintenant...
Je vais avoir de la difficulté à obtenir des valeurs dans le formModel paramètre de la méthode post.
Cela fonctionne (ce qui signifie que je peux voir la valeur), mais il est pénible car je dois écrire exactement où il se trouve dans une chaîne de chaque champ:
@Html.TextBox("formModel.candidateModel.tblApplicant.FirstName", Model.candidateModel.tblApplicant.FirstName)
Il rend comme ceci:
<input name="formModel.candidateModel.tblApplicant.FirstName" id="formModel_candidateModel_tblApplicant_FirstName" type="text" value="Graeme"/>
Cela ne fonctionne pas:
@Html.TextBoxFor(c => c.candidateModel.tblApplicant.FirstName)
Il rend comme ceci:
<input name="candidateModel.tblApplicant.FirstName" id="candidateModel_tblApplicant_FirstName" type="text" value="Graeme"/>
Maintenant, je suis en supposant que le problème réside dans la différence de l'id de l'
Donc merci de me répondre ceci:
- Suis-je marcher sur le droit chemin
- Pourquoi ne pas textboxfor obtenir la bonne valeur/id, et comment puis-je faire obtenir la bonne valeur/id afin que je puisse le récupérer dans un POST(si c'est même le problème)?
- En outre, il semble que textboxfor est restrictive, de la même manière que si vous avez une date de temps, comment utilisez-vous la .toshortdate() la méthode? Cela me fait penser textboxfor n'est pas utile pour moi.
Clarification rapide:
quand je dis textboxfor n'est pas le travail, c'EST d'obtenir des valeurs quand j'ai la forme. Afin qu'elles remplissent, mais sur le POSTE /la soumission, je ne peux pas les voir dans le formModel dans les paramètres.
Un autre côté remarque:
Aucun des html helpers travail, c'est le problème. Ils n'apparaissent pas dans modelstate.
Merci à tous pour l'aide
Réponse:
html.TextBoxFor et html.Zone de texte, l'Affichage des valeurs, le modèle dans les paramètres
C'était un problème de mon point de vue, quelque part, j'ai remplacé tout le code avec l'extrait de code dans cette réponse, et cela a fonctionné.
Merci encore
OriginalL'auteur MrJD | 2011-11-19
Vous devez vous connecter pour publier un commentaire.
Oui.
Il y a autre chose dans votre code qui fait ce pas de travail. C'est difficile à dire puisque vous n'avez pas montré votre code. Voici un exemple qui illustre et s'avère qu'il y a quelque chose d'autre se passe avec votre code:
Modèle:
Contrôleur:
Vue:
Je suis d'accord que
TextBoxFor
est restrictive. C'est pourquoi je vous recommande de toujours utiliserEditorFor
au lieu deTextBoxFor
. Il vous permettra tout simplement de décorer votre modèle de vue de la propriété avec le[DisplayFormat]
attribut et voilà. Vous obtenez n'importe quel format que vous souhaitez.Par exemple:
et dans la vue:
sera le format de la date exactement comme vous le souhaitez.
OriginalL'auteur Darin Dimitrov
le modèle de classeur utilise le nom de lier les valeurs pour le modèle, et le code html helpers par exemple
Html.TextBoxFor
utilise le corps de la lambda expression pour définir le nom, cependant, vous pouvez spécifier le nom de vous-même qui vous font à l'aide de laHtml.TextBox(
helpercomme Darin a dit il y a quelque chose d'autre qui est en cours d'arrêt que le code fonctionne comme prévu, sinon il doit avoir travaillé ...
OriginalL'auteur Rafay
Si votre vue est fortement typé, essayez de l'aide ci-dessous, au lieu d'appeler chacun d'aide sur chaque propriété
Mise à jour:
Eh bien, vous avez essayé d'utiliser viewmodel pour simplifier cette tâche? Et quand vous recevez en retour les données que vous pouvez mapper vos modèles réels. gardez votre point de vue propre vous donnera moins de maux de tête à l'avenir. En plus, vous pouvez utiliser AutoMapper pour vous aider.
Ici un exemple, si vous pensez que vous aidera.
http://weblogs.asp.net/shijuvarghese/archive/2010/02/01/view-model-pattern-and-automapper-in-asp-net-mvc-applications.aspx
avez-vous essayé @Html.EditorFor(m => m.candidateModel.tblApplicant)? au lieu de @Html.EditorFor(m => m.candidateModel)
Je suis allé tout le chemin jusqu'à une valeur unique. Je ne peux pas faire ce que vous proposez car de toute façon il y a de divers agents recenseurs et des relations complexes dans mes classes. J'ai donc besoin de passer par champ par champ. Mais chaque fois que je reçois .net pour le comprendre, je n'ai pas les valeurs en arrière quand je POSTE
Eh bien, vous avez essayé d'utiliser viewmodel pour simplifier cette tâche? En plus, vous pouvez utiliser AutoMapper pour vous aider.
formModel est mon point de vue, le modèle et je n'ai pas besoin mappant automatiquement. Le problème n'est pas aux parents de rapport de données parce que cela se rapporte. Le problème est que, sur le POST, html helpers ne fonctionnent pas en raison de leur ID apparemment.
OriginalL'auteur wnascimento