2010-02-23 3 views
1

J'ai un site Web avec MVC, qui a une liste déroulante dans la page maître. Les données de la base de données sont liées à une année. Ainsi, chaque année, nous obtenons une nouvelle base de données propre pour commencer (ou du moins semble-t-il sur le site Web car l'année a changé)Dropdown sur masterpage. Comment obtenir la bonne valeur

La liste déroulante vous permet de sélectionner l'année que vous souhaitez modifier/voir/entrer.

dans le global.asax i ont une méthode:

public static SelectList schooljaarList() { 
     NASDataContext _db = new NASDataContext(); 
     int schooljaarID = (from p in _db.Schooljaars 
          where p.Sch_Schooljaar == SCHOOLJAAR 
          select p.Sch_ID).First(); 
     return new SelectList(_db.Schooljaars.ToList(), "Sch_ID", "Sch_Schooljaar", schooljaarID); 
    } 

qui rend le SelectList pour le menu déroulant, et définit la valeur par défaut pour l'année en cours.

j'ai modifié le routage pour que l'année est toujours visible dans l'URL

routes.MapRoute(
      "Default", // Route name 
      "{schooljaar}/{controller}/{action}/{id}", // URL with parameters 
      new { schooljaar = MvcApplication.SCHOOLJAAR, controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults 
      , new { schooljaar = @"(19|20)\d\d-(19|20)\d\d" } 
     ); 

Dans le masterpage i ajouté le contrôle:

<%= Html.DropDownList("schselectr", MVC2_NASTEST.MvcApplication.schooljaarList())%> 

et quand quelqu'un choisit une autre année dans la liste déroulante, je navigue vers l'url correspondant en utilisant jQuery

$(document).ready(function() { 

     $("#schselectr").change(function() { 
      //alert(window.location.pathname); 
      var oldpath = window.location.pathname; 
      // alert($('option:selected', this).text()); 
      var newpath = "http://" + window.location.host + "/" + $('option:selected', this).text().trim() + window.location.pathname.substr(10); 
      //alert(newpath); 
      window.location = newpath; 
     }); 
    }); 

jusqu'à ici tout w orks. L'URL ressemble à ceci: http://localhost:50152/2010-2011/Lesgever 2010-2011 est l'année.

Maintenant, quand je suis sur cette URL. Je veux que la valeur sélectionnée dans la liste déroulante ne sera pas l'année en cours, mais l'année qui est visible dans l'URL.

J'ai essayé d'ajouter le code suivant dans la fonction document.ready du jQuery

 alert(window.location.pathname.substr(1, 9).trim()); 
     document.getElementById("schselectr").value = "2010-2011"; 
     //$("#schselectr").val(window.location.pathname.substr(1, 9).trim()); 

mais il ne fonctionne pas. le JS ne génère aucune erreur. J'utilise firefox.

mes questions:

  • Comment puis-je obtenir ce travail, que l'année de l'URL sera l'élément sélectionné dans le menu déroulant, en utilisant javascript, jquery, ou, de préférence, même dans MVC.

  • Comment amélioreriez-vous ma méthode de travail pour ce système. (Aka: la méthode dans le global.asax, ...)

+0

Pouvez-vous publier le code HTML de sélection généré? C'est à dire. faire une vue-source. –

Répondre

1

Lorsque vous définissez la valeur de la zone de sélection, vous essayez de le régler sur le texte visible, ou la valeur d'arrière-plan.

qui suit:

$("#schselectr").val('2010-2011') 

fonctionnera si le select HTML est comme si

<select id='schselectr'> 
    <option value='2009-2010'>2009-2010</option> 
    <option value='2010-2011'>2010-2011</option> 
</select> 

Toutefois, si le code HTML qui sort est:

<select id='schselectr'> 
    <option>2009-2010</option> 
    <option>2010-2011</option> 
</select> 

Ensuite, ne fonctionnera pas.

Pouvez-vous poster le code HTML de sélection qui est généré. C'est à dire. faire une vue-source.

+0

la source était comme ceci: comme 1 est l'ID. J'ai maintenant changé le code que la valeur et le texte seraient à la fois "2010-2011" et maintenant cela fonctionne. Merci. – Stefanvds

+0

Voulez-vous ennuyer ça alors? Merci :-) –