2010-11-06 4 views
5

J'ai un dropdownlist: <% = Html.DropDownList ("ddlNames", nouvelle SelectList (Model.NameList, "ID", "Nom"))%>Html.ActionLink avec identifiant d'un dropdownlist

J'ai une ActionLink: <%: Html.ActionLink ("modifier", "Modifier", "membres", nouvelle {zone = "MembersArea", id = XXX}, null)%>

Je veux la valeur de la liste déroulante dans le XXX. Je souhaite donc utiliser les valeurs des contrôles d'une vue dans ActionLink. Est-ce possible d'une manière simple?

grâce,

Filip

+0

Juste pour clarifier: vous voulez que le lien pour prendre la valeur sélectionnée de la LDD? alors à chaque fois que le DDL change, vous voulez changer la valeur du lien? Parce que cela nécessitera javascript pour mettre à jour la valeur comme dans la réponse @ Darin. – TJB

+0

oui, je veux faire ça. – Filip

Répondre

3

Vous ne pouvez pas le faire parce que les aides html exécutent sur le côté du serveur alors que la valeur de la liste déroulante peut changer du côté client. La seule façon d'y parvenir est d'utiliser javascript. Vous pouvez vous inscrire à l'événement onchange de la liste déroulante et modifier la valeur de l'attribut href de l'ancre:

$(function() { 
    $('#ddlNames').change(function() { 
     var value = this.value; // get the selected value 
     // TODO: modify the value of the anchor 
    }); 
}); 

C'est probablement pas la meilleure solution, car les routes sont configurées sur le côté serveur et afin de modifier la valeur du lien que vous devez faire une manipulation de chaîne du côté du client. Comme alternative, vous pouvez utiliser un formulaire et un bouton de soumission au lieu d'une ancre. De cette façon, la valeur sélectionnée de la liste déroulante sera automatiquement envoyée au serveur et vous ne pas besoin de javascript:

<% using (Html.BeginForm("Edit", "Members", new { area = "MembersArea" })) { %> 
    <%= Html.DropDownListFor(x => x.SelectedName, 
     new SelectList(Model.NameList, "ID", "Name"))%> 
    <input type="submit" value="Edit" /> 
<% } %> 
3

Au lieu de modifier la valeur de l'ancre chaque fois un menu déroulant correspondant est modifié, modifier juste une fois, sur clic.

Exemple d'utilisation Razor:

@Html.DropDownList("DropDownFirstNames", new SelectList(Model.FirstNames, "ID", "Name")) 
@Html.DropDownList("DropDownLastNames", new SelectList(Model.LastNames, "ID", "Name")) 
@Html.ActionLink("Submit name", "ActionName", "ControllerName", null, new { @id = "SubmitName" }) 

<script type="text/javascript"> 
    $('#SubmitName').click(function() { 
     var first = $('#DropDownFirstNames').val(); 
     var last = $('#DropDownLastNames').val(); 
     var path = '@Url.Content("~/ControllerName/ActionName")' + "?firstId=" + first + "+&lastId=" + last 
     $(this).attr("href", path); 
    }); 
</script> 
Questions connexes