Lier Modèle Mvc en utilisant html <select> tag
j'ai une liste déroulante, cette liste de lier la valeur à l'aide de appel ajax
<script type="text/javascript">
function getCityName(data) {
$('#ddlCity').empty();
if (data != 0) {
$.ajax({
type: "POST",
url: "/Home/GetCityList",
data: { 'CityId': data },
cache: false,
//contentType: "application/json",
datatype: "JSON",
success: function (result) {
var cityData = result.Data;
var defaultV = new Option("--Select--", 0, true);
$('#ddlCity').append(defaultV);
for (var i = 0; i < cityData.length; i++) {
var opt = new Option(cityData[i].CityName, cityData[i].Id);
$('#ddlCity').append(opt);
}
}
});
}
else {
alert('Select State');
}
}
<div>@Html.LabelFor(c => c.CityId)</div>
<div><select id="ddlCity"></select></div>
entendre je veux lier modèle prop CityId dans le modèle de la classe de façon à lier...
- Votre
<select>
élément a besoin d'unname
attribut pour correspondre le modèle de la propriété. Ne pas générer manuellement. Utiliser leDropDownListFor()
méthode - sortie de flux de données json et comment lier dans DropDownListFor()
- Pourquoi dans le monde, êtes-vous d'utiliser ajax pour cela si c'est la seule dropdownlist dans la vue. Vous n'avez pas de liaison de modèle et pas de validation. Toutefois, si c'est pour en cascade dropdownlists, puis reportez-vous à ce DotNetFiddle
- Comment faites-vous appel à getCityName, est-il un bouton ou quelque chose?
- pas touche, c'est l'événement de la liste déroulante onchange()
Vous devez vous connecter pour publier un commentaire.
élément a besoin d'un nom d'attribut pour correspondre le modèle de la propriété.
ajouter CityId dans l'attribut name de la balise select:
la
<select>
balise besoin MVC Nom de la propriété à ajouter,@Html.NameFor(x=>x.Entity Property)
et le nom de la propriété valeur de liaison dans le modèle.code html ci-dessous :
merci de répondre pour répondre à cette question.
Ci-dessous est l'exemple-
Où "CountryList' qui est passée d'une ViewModel de la propriété et de "CountryId' est le champ utilisé pour enregistrer la valeur dans la table de base de données.
Si vous êtes certain que vous voulez remplir cette liste déroulante à l'aide de JavaScript, vous aurez besoin de passer le modèle de la valeur à JavaScript et à tester si il est sélectionné.
Donc quelque chose comme ceci:
En dehors de cela, si vous voulez la liaison de travailler sur sumbitting l'contenant le formulaire, vous aurez à donner à l'élément d'entrée d'un nom:
Html.DropDownListFor()
vous devez également sélectionner l'élément sélectionné.Voici comment j'allais le faire:
Je voudrais oublier l'ajax que vous êtes en train d'utiliser et d'utiliser
@Ajax.BeginForm
et@Html.DropDownListFor
.Je suis en supposant que vous êtes en essayant de la chaîne des listes de sélection lorsque l'utilisateur sélectionne un état et qu'il remplit les villes dans cet état.
D'abord, vous aurez besoin de vos modèles, l'un pour la vue principale et un pour la partie que nous allons avoir besoin:
MainViewModel:
PartialViewModel:
Ensuite, vous aurez besoin de lier des données à partir de votre modèle de votre point de vue (je suis en supposant que les données de l'état existe lorsque vous devez d'abord charger votre vue principale):
Avis de la façon dont j'ai la liste déroulante des villes dans une vue partielle, c'est afin que nous puissions mettre à jour la liste déroulante à l'aide d'Ajax avec un ActionResult dans le contrôleur qui renvoie cette vue partielle avec un
List<CityData>
et etInt
comme son modèle:Et puis ne pas oublier de créer le "_CityDataPartialView" vue partielle qui prend un
List<CityData>
et unInt
comme son modèle:Maintenant, lorsque vous sélectionnez un état, il va effectuer un appel Ajax pour obtenir les villes et mise à jour de la vue partielle qui contient la liste déroulante des villes et tout ce qui sera lié au modèle => les états, l'état sélectionné, les villes, la ville sélectionnée.
N'oubliez pas d'envoyer un
new List<CityData>()
pourCityDatas
lorsque vous chargez d'abord le modèle de la vue principale ou ça vous donne une erreur.Aussi, vous avez besoin d'avoir
UnobtrusiveJavaScriptEnabled
définie sur true dans votre configuration web:...et aussi avoir
jquery.unobtrusive-ajax.js
référencé... ou aucun des@Ajax
choses fonctionnent.Cela n'a pas été testé, mais éventuellement avec de légers ajustements que cela va fonctionner.