2013-06-03 1 views
0

J'ai une page qui sert à deux fins, la plupart du temps afficher une entrée dans la base de données, mais certains champs sont affichés dans textfields/textareas parce que vous pouvez modifier valeurs, puis en fonction du bouton que vous sélectionnez en bas, vous pouvez mettre à jour ces entrées. J'aime particulièrement la zone de texte en raison de son aspect/ressenti, naturellement redimensionnable dans la page, et vient avec des options standard de clic droit comme SelectAll, etc. thx au soutien du navigateur. Quoi qu'il en soit, l'un de ces champs (affiché dans une zone de texte) que je voudrais empêcher de revenir après la publication, car cette valeur ne va pas être modifiée (je l'ai même fait @readonly afin que vous puissiez ' t même éditer la zone de texte).ASP.NET MVC2 zone de texte dans la forme qui lie la valeur du modèle, mais empêche la publication

Comment faire pour empêcher la publication de formulaire pour une entrée de la page ASPX? Je sais que c'est contre-intuitif en général, mais je pensais qu'il y avait peut-être un moyen similaire aux entrées cachées. En outre, je sais que dans le contrôleur, je pourrais simplement effacer ce champ dans le modèle avant de faire quoi que ce soit avec le modèle soumis à partir du formulaire, mais je suis curieux de savoir s'il y a une option de la page que je pourrais faire.

J'utilise cette syntaxe pour définir la zone de texte:

<%: Html.TextAreaFor(model => model.Key, new { @readonly = "readonly", @class = "readonly", cols = 62, rows = 15 })%> 

EDIT:
Je devrais probablement avoir noté que l'une des raisons principales que je dois faire est parce que l'un des les champs du modèle peuvent contenir du HTML. Il s'agit d'un site Web interne et ce champ ne peut pas être modifié manuellement, donc personne ne peut entrer du code HTML, c'est juste une valeur dans la base de données qui provient d'un programme de génération de licence. Ainsi, lorsque j'utilise une TextArea dans un formulaire lié à un champ de modèle, ASP.NET lève une exception lors de la liaison des données TextArea au modèle à envoyer après la publication. J'ai vu les réponses SO en utilisant les attributs [AllowHtml] et [ValidateInput (false)], l'un n'était pas disponible dans MVC2 et l'autre nécessite la rétrogradation du requestValidationMode, donc je cherche un moyen alternatif pour empêcher le valeur HTML possible d'être affiché à tous (mais toujours affiché dans une zone de texte).

Répondre

0

J'ai réalisé ce en manipulant l'événement formulaire soumettre jQuery:

<script type="text/javascript"> 
    $(document).ready(function() 
    { 
     // clear key area upon form post, because old keys contain HTML tags, 
     // which cause an exception during model binding when form validation is on 
     $("form").submit(function() 
     { 
      $("#keyArea").val(""); 
     }); 
    }); 
</script> 

Fondamentalement suffit de décocher la zone de texte avant qu'il ne soit lié au modèle et affiché. De cette façon, je peux toujours utiliser la zone de texte pour afficher la valeur du modèle, et l'empêcher simplement de revenir sur la publication.

Seul un problème mineur est que si le message passe l'utilisateur à une autre page (probablement), alors lorsque l'utilisateur appuie sur le bouton de retour, la zone de texte sera vide. Mais une simple actualisation de la page répond à cela.

Questions connexes