2016-04-26 1 views
1

Я довольно новичок в Visual Studio. Я работаю прямо сейчас на Visual Studio Express 2013, и я пытаюсь заполнить определенное текстовое поле в ASP.net.Заполнение текстового поля из DropDownList Выбор заполнен CascadingDropDown

Я обобщу все как можно лучше (я не являюсь носителем английского языка)

Сначала у меня была эта проблема с недействительной обратной передачей. Я нашел только один правильное решение здесь: https://johanleino.wordpress.com/2009/11/17/cascadingdropdown-causes-invalid-postback-or-callback-argument-error/ Итак, вот почему у меня есть NoValidationDropDownList вместо классического DROPDOWNLIST

Кроме того, у меня есть 2 DropDownList с помощью Ajax CascadingDropDown (я заполняю вторую в зависимости от выбранного значение первого)

Вот мое мнение:

<asp:TableCell> 
    <asp:NoValidationDropDownList OnSelectedIndexChanged="DropDownListVille_SelectedIndexChanged" ID="DropDownListVille" runat="server" class="ddlVille" ></asp:NoValidationDropDownList> 
    <ajax:CascadingDropDown ID="CascadingDropDown1" runat="server" Category="Ville" 
      TargetControlID="DropDownListVille" PromptText="Non définie" LoadingText="Chargement des villes" 
      ServiceMethod="AfficherVille" ServicePath="CascadingDropDown.asmx"></ajax:CascadingDropDown> 
</asp:TableCell> 

<asp:TableCell runat="server"> 
    <asp:NoValidationDropDownList ID="DropDownListRue" runat="server" class="ddlRue" OnSelectedIndexChanged="DropDownListVille_SelectedIndexChanged"></asp:NoValidationDropDownList> 
    <ajax:CascadingDropDown ID="ccdRegion" runat="server" Category="Rue" ParentControlID="DropDownListVille" 
      TargetControlID="DropDownListRue" PromptText="Non définie" LoadingText="Chargement des rues" 
      ServiceMethod="VilleRueLier" ServicePath="CascadingDropDown.asmx"></ajax:CascadingDropDown> 
</asp:TableCell> 

<asp:TableCell> 
    <asp:TextBox ID="TextBoxCP" runat="server" class="tbcp"></asp:TextBox> 
</asp:TableCell> 

Мой первый выпадающий есть города, второй один есть улицы и мое текстовое поле имеют почтовый индекс. Все данные поступают из одной БД, используя эти две таблицы:

Виль (Id_Ville, nom_ville, code_postal) Перевод в

city(id_city,city_name,postcode) 

Rue (Id_Rue, Nom_Rue) Перевод в

street(id_street,street_name) 

Я хотел бы динамически изменять почтовый индекс в зависимости от идентификатора выбранного города (этот идентификатор хранится как значение в выпадающем списке).

См., Когда город, которого хочет пользователь, находится не в дБ, он может выбрать специальное значение первого раскрывающегося списка и добавить новый город.

Когда он это делает, на странице отображается текстовое поле с ajax.

Здесь можно добавить новый город, получив почтовый индекс. Кроме того, текстовый текст Postcode находится в режиме «только для чтения».

Но когда он выбирает указанный город, я хочу, чтобы текстовое поле заполнилось.

Там в мои методы WebService, связанные с CascadingDropDown:

[System.Web.Script.Services.ScriptService()] 
public class WebService1 : System.Web.Services.WebService 
{ 
private Passerelle.Passerelle passerelle = new Passerelle.Passerelle(); 


[WebMethod] 
public CascadingDropDownNameValue[] AfficherVille(string knownCategoryValues, string category) 
{ 


      List<CascadingDropDownNameValue> VilleDetails = new List<CascadingDropDownNameValue>(); 

      ListVille listeVille = new ListVille(); 
      listeVille = passerelle.getListVille(); 

      foreach (Ville v in listeVille.List) 
      { 

       string idVille = v.IdVille.ToString(); 
       string nomVille = v.NomVille.ToString(); 
       VilleDetails.Add(new CascadingDropDownNameValue(nomVille, idVille)); 
       Debug.WriteLine("Id Ville = " + idVille + " ----- NomVille = " + nomVille); 
      } 
      return VilleDetails.ToArray(); 
    } 

[WebMethod] 
public CascadingDropDownNameValue[] VilleRueLier(string knownCategoryValues, string category) 
    { 
    ///GET DATA FROM SQL 

    ListRue listeRue = new ListRue(); 

    StringDictionary VilleDetails = AjaxControlToolkit.CascadingDropDown.ParseKnownCategoryValuesString(knownCategoryValues); 

    int idVille = Convert.ToInt32(VilleDetails["Ville"]); 

    List<CascadingDropDownNameValue> countrydetails = new List<CascadingDropDownNameValue>(); 

    //Here I get the data from my table 'Rue' with the ID coming from 
    listeRue = passerelle.getListRue(idVille); 

      countrydetails.Add(new CascadingDropDownNameValue("Pas dans la liste", "-1")); 

      foreach (Rue r in listeRue.list) 
      { 
       string idRue = r.idRue.ToString(); 
       string nomRue = r.nomRue.ToString(); 
       countrydetails.Add(new CascadingDropDownNameValue(nomRue, idRue)); 
       Debug.WriteLine("Id rue = " + idRue + " ----- NomRue = " + nomRue); 
      }  

      return countrydetails.ToArray(); 

    } 

} 

Я пробовал много вещей ... Классические события в некоторых Ajax вызовов функций. И я просто не могу понять, как это сделать ...

И, конечно, я следую классическому шаблону MVC. Итак ... Нет запроса sql в представлении.

Я не умею работать с ajax. Я, вероятно, пропустил какую-то отличную функцию ajax/asp.net с другим webMethod.

Большое спасибо всем, кто может мне помочь.

И извините за все правописания/грамматические ошибки.

Я не смогу ответить в течение нескольких часов (я вернусь примерно через ~ 12 часов). Если у вас есть вопросы ... Я буду там, чтобы ответить вам.

ответ

0

Хорошо, мой плохой.

Мое мероприятие не работает, потому что Я забыл AutoPostBack = true.

Использование UpdatePanel вокруг элементов моего представления, чтобы запретить обновление страницы, теперь я исправил все.

Смежные вопросы