2010-05-06 7 views
0

J'ai une forme très complexe et je suis en utilisant le modèle MVC contraignant pour capturer toutes les informationsAsp.net MVC - modèle de liaison bouton d'image

Je l'ai mis en place pour capturer tous les différents les soumissions qui peuvent arriver car il y a environ 10 boutons de soumission différents sur le formulaire, et il y a aussi 2 boutons d'image

J'ai essayé d'obtenir un peu d'intelligence (ou du moins je pensais) avec capturer les soumissions de bouton d'image, et j'ai créé une classe enfant afin que je puisse capturer la valeur x qui est retournée

public class ImageButtonViewData { 
    public int x { get; set; } 
    public string Value { get; set; } 
} 

La classe mère ressemble à ce

public class ViewDataObject { 
    public ImageButtonViewData ImageButton { get; set; } 

    public ViewDataObject(){ 
     this.ImageButton = new ImageButton(); 
    } 
} 

Le code HTML pour le bouton d'image ressemble alors

<input type="image" id="ViewDataObject_ImageButton" name="ViewDataObject.ImageButton" /> 

Cela fonctionne très bien dans tous les navigateurs sauf pour Chrome.

Quand je déboguer en chrome, l'objet Request.Form contient les valeurs que je voudrais attendre, mais le modèle de liaison a eu lieu, la propriété ImageButton sur la ViewDataObject a été défini sur null

La seule différence que je peux voir entre les valeurs de soumission est que Chrome passe le x en minuscule (ViewDataObject.ImageButton.x) et IE le passe en majuscule (ViewDataObject.ImageButton.X) mais je ne pensais pas que la liaison du modèle ait été prise en compte de casing sur les noms de propriété

Quelqu'un a-t-il des idées?

EDIT => Juste pour clarifier, je n'essaie pas de trouver une solution de contournement pour cela, j'essaie de comprendre pourquoi cette technique ne fonctionne pas dans Chrome, car elle fonctionne dans tous les autres navigateurs et la bonne les données sont transmis par

Répondre

0

Il y a deux options, laissez-moi énumérer une vue

  1. Pour vérifier quel bouton a été pressé, vous pouvez donner tous les boutons les mêmes noms, mais différents ids. Dans votre FormCollection sur votre Action de Contrôleur, vous devriez pouvoir obtenir le bouton qui a été pressé en faisant quelque chose comme "collection [" buttonName "]" et en vérifiant sa valeur. Je pense que cette option est la bonne à suivre, et c'est comme suit. Séparez vos formes correctement. Vous pouvez avoir plusieurs formulaires sur une page et attacher chacun à sa propre action de contrôleur, vous n'avez pas besoin de faire des erreurs si les déclarations et il sépare réellement vos actions bien.

J'espère que cela répond à votre question en quelque sorte.

+0

Désolé, je aurais dû expliqué plus loin. Je ne cherche pas une manière différente de faire ceci (je pourrais toujours vérifier les valeurs de Form explicitement au lieu de compter sur la liaison de modèle). J'essaie de comprendre pourquoi cela ne fonctionne pas dans Chrome, étant donné que la technique fonctionne correctement dans tous les autres navigateurs, et que le Chrome transmet les données correctement –

0

Je n'ai pas pu reproduire votre problème, mais je ne pense pas que les entrées d'image renvoient une valeur, seulement .x et .y. Les travaux suivants dans Chrome, Firefox et IE (désolé pour vb.net):

Public Class ImageButtonViewData 
    Public Property X As String 
    Public Property Y As String 

    Public ReadOnly Property WasClicked As Boolean 
     Get 
      Return Not String.IsNullOrEmpty(X) 
     End Get 
    End Property 

End Class 
Questions connexes