2010-11-09 12 views
0

J'ai un site Web écrit en ASP.NET MVC et j'ai un ensemble de paramètres à la page en question qui spécifie ce que la page précédente est. Le raisonnement est le suivant: lorsqu'un utilisateur clique sur une image d'une page particulière, la page chargée cochera automatiquement la case appropriée en utilisant javascript (jQuery en particulier).Pourquoi ces cases à cocher ne sont-elles pas vérifiées par code-behind?

Voici le code qui obtient et définit le paramètre:

<script type="text/C#" runat="server"> 
    protected string Referrer = string.Empty; 
    protected override void OnLoad(EventArgs e) 
    { 
     try 
     { 
      Referrer = Request.UrlReferrer.Segments[2].ToLower(); 
     } 
     catch (System.Exception) 
     { 

      Referrer = string.Empty; 
     } 
     base.OnLoad(e); 
    } 
</script> 

Ensuite, voici la collection de cases:

<div id="interestSelect1" class="interestPad"> 
     <%= Html.CheckBoxFor(model => model.Interests[0])%> 
     <label for="Interests_0_">Insulation</label> 
     <%= Html.CheckBoxFor(model => model.Interests[1])%> 
     <label for="Interests_1_">Windows</label> 
     <%= Html.CheckBoxFor(model => model.Interests[2])%> 
     <label for="Interests_2_">Siding</label> 
     <%= Html.CheckBoxFor(model => model.Interests[3])%> 
     <label for="Interests_3_">Roofing</label> 
    </div> 
    <div class="clear"> 
    </div> 
    <div id="interestSelect2" class="interestPad"> 
     <%= Html.CheckBoxFor(model => model.Interests[4])%> 
     <label for="Interests_4_">Gutters/Protection</label> 
     <%= Html.CheckBoxFor(model => model.Interests[5])%> 
     <label for="Interests_5_">Patio Doors</label> 
    </div> 

Lors du rendu dans le navigateur, voici ce que chaque des cases à cocher ressemblent à:

<input id="Interests_0_" name="Interests[0]" type="checkbox" value="true" /> 
<input name="Interests[0]" type="hidden" value="false" /> 
<label for="Interests_0_">Insulation</label> 

Voici le javascript que j'utilise, qui ne fonctionne pas: 01 Je fais évidemment quelque chose de complètement faux, quelqu'un peut-il me diriger dans la bonne direction?

Merci!

EDIT: Ressemble à un autre fichier JS qui se trouvait sur une page MasterPage qui a été appelée avant que mon bloc JS n'entraîne la non-vérification des cases. Le principal problème était l'oubli de l'identifiant #.

+0

@ajreal - votre commentaire me semble plutôt vague. Pourriez-vous élaborer? – Anders

+0

mon mauvais, $ ('Interests_0 _'). Attr ('checked', 'checked'); semble devoir être corrigé à $ ('# Interests_0 _'). Attr ('checked', 'checked'); – ajreal

Répondre

1

#id selectors ont besoin d'un préfixe #, comme ceci:

$('#Interests_0_').attr('checked', 'checked'); 

Sans #, il est un element selector, la recherche d'un élément <Interests_0_>.

Vous pouvez affiner votre silhouette vers le bas ensemble avec un objet bien, comme celui-ci:

var ref = '<%= Referrer %>'; 
var map = {"insultation":"#Interests_0_", 
      "windows":"#Interests_1_", 
      "siding":"#Interests_2_", 
      "roofing":"#Interests_3_", 
      "gutters":"#Interests_4_", 
      "patiodoors":"#Interests_5_"}; 
$(function() { 
    var id = map[ref]; 
    if(id) $(id).attr('checked', true); 
}); 
+0

Hmm, pour une raison quelconque, il ne fonctionne toujours pas correctement avec ce changement (que je me sens idiot de négliger). Merci pour la version orientée objet de ce que j'ai eu, cependant, c'est très utile. Aussi, est '$ (function() {});' raccourci pour '$ (document) .ready (function() {});'? – Anders

1

Ce n'est pas MVC, mais plutôt ASP.NET WebForms de classique. Il n'y a pas de concept de code-behind dans MVC, dans des circonstances normales, vous n'utilisez pas d'événements comme OnLoad, et vous n'utilisez pas normalement les blocs de script runat = server. Jetez un oeil à la nerd dinner example pour un aperçu de MVC.

+0

Je pense que l'OP utilise juste des noms incorrects ici, mais il * utilise * MVC. '<% = Html.CheckBoxFor (model => model.Interests [0])%>' n'est pas un webform classique. –

+0

C'est vrai, mais il y a un événement OnLoad, qui n'est certainement pas MVC. Au mieux, c'est un mélange des deux. Je pense que c'est plus que d'utiliser la mauvaise terminologie - peut-être que cela est porté sur des webforms standards? – UpTheCreek

+0

@UpTheCreek - Y at-il une autre méthode que je peux utiliser pour passer le dernier segment de l'URL de référence sans utiliser le code OnLoad? C'est la seule raison pour laquelle je l'ai ici. – Anders