2016-05-18 2 views
0

У меня есть ASP.NET форма (c#, MySQL бэкенд), который показывает, среди других трех DropDownList виджетовJQuery изменение SelectedValue в DataBound ASP.NET DropDownList

<asp:FormView 
    ID="_fvNoleggio" 
    runat="server" 
    DataKeyNames="id" 
    DataSourceID="_sdsNoleggio" 
    DefaultMode="Edit" > 
     <EditItemTemplate> 
      <asp:Table runat="server"> 
       <asp:TableRow> 
        <asp:TableCell> 
         <asp:Label 
          AssociatedControlID="_ddlAssicurazioneCedente" 
          ID="_lblAssicurazioneCedente" 
          runat="server" 
          Text="Assicurazione cedente" /> 
        </asp:TableCell> 
        <asp:TableCell> 
         <asp:DropDownList 
          ID="_ddlAssicurazioneCedente" 
          ClientIDMode="Static" 
          runat="server" 
          DataSourceID="_sdsAssicurazione" 
          onchange="javascript: CheckAssicurazione(this);" 
          DataTextField="nome" 
          DataValueField="id" 
          AppendDataBoundItems="true" 
         SelectedValue='<%#Eval("id_assicurazione_cedente")%>' > 
          <asp:ListItem Text="Nessuna" Value="" /> 
         </asp:DropDownList> 
        </asp:TableCell> 
        <asp:TableCell>&nbsp;</asp:TableCell> 
       </asp:TableRow> 

       <asp:TableRow> 
        <asp:TableCell> 
         <asp:Label 
          AssociatedControlID="_ddlAssicurazioneControparte" 
          ID="_lblAssicurazioneControparte" 
          runat="server" 
          Text="Assicurazione cedente" /> 
        </asp:TableCell> 
        <asp:TableCell> 
         <asp:DropDownList 
          ID="_ddlAssicurazioneControparte" 
          ClientIDMode="Static" 
          runat="server" 
          DataSourceID="_sdsAssicurazione" 
          onchange="javascript:CheckAssicurazione(this);" 
          DataTextField="nome" 
          DataValueField="id" 
          AppendDataBoundItems="true" 
        SelectedValue='<%#Eval("id_assicurazione_controparte")%>' > 
          <asp:ListItem Text="Nessuna" Value="" /> 
         </asp:DropDownList> 
        </asp:TableCell> 
        <asp:TableCell>&nbsp;</asp:TableCell> 
       </asp:TableRow> 

       <asp:TableRow> 
        <asp:TableCell> 
         <asp:Label 
          AssociatedControlID="_ddlAssicurazionePagante" 
          ID="_lblAssicurazionePagante" 
          runat="server" 
          Text="Assicurazione cedente" /> 
        </asp:TableCell> 
        <asp:TableCell> 
         <asp:DropDownList 
          ID="_ddlAssicurazionePagante" 
          ClientIDMode="Static" 
          runat="server" 
          DataSourceID="_sdsAssicurazione" 
          onchange="javascript: CheckAssicurazione(this);" 
          DataTextField="nome" 
          DataValueField="id" 
          AppendDataBoundItems="true" 
         SelectedValue='<%#Eval("id_assicurazione_pagante")%>' > 
           <asp:ListItem Text="Nessuna." Value="" /> 
         </asp:DropDownList> 
        </asp:TableCell> 
        <asp:TableCell>&nbsp;</asp:TableCell> 
       </asp:TableRow> 
      </asp:Table> 
     </EditItemTemplate> 
</asp:FormView> 

Все они питаются корыта один элемент, в то время как SQLDataSourceSelectedValue свойства обязательно соответствие поля мастера FIELDSET (включая подачу FormView):

<asp:SqlDataSource 
    ID="_sdsAssicurazione" 
    runat="server" 
    ConnectionString="<%$ ConnectionStrings:mydb %>" 
    ProviderName="<%$ ConnectionStrings:mydb.ProviderName %>" 
    SelectCommand=" SELECT 
         * 
        FROM 
         assicurazioni;"> 
</asp:SqlDataSource> 

<asp:SqlDataSource 
    ID="_sdsNoleggio" 
    runat="server" 
    ConnectionString="<%$ ConnectionStrings:mydb %>" 
    ProviderName="<%$ ConnectionStrings:mydb.ProviderName %>" 
    SelectCommand=" SELECT 
         * 
        FROM 
         noleggio_veicoli;"> 
</asp:SqlDataSource> 

нужно проверить выбранные значения в первые два DDL (плюс другое внешнее значение), чтобы установить третье DDL выбранное значение. Это самый код .js я использую:

function CheckAssicurazione(widget) { 
    if (widget == null) 
     return; 

    CheckAssicurazionePagante(); 

    $.ajax({ 
     type: "POST", 
     url: "/Service/WSDataService.asmx/CheckAssicurazione", 
     data: "{'id':'" + widget.value + "'}", 
     dataType: "json", 
     contentType: "application/json; charset=utf-8", 
     success: function (data) { 
      if (data == null) 
       return; 

      if (data.d == null) 
       return; 

      if (data.d == "True") 
       alert("Warning!") 
     }, 
     error: function (XMLHttpRequest, textStatus, errorThrown) { 
      alert(textStatus); 
     } 
    }); 
} 

function CheckAssicurazionePagante() 
{ 
    // _tipo_indennizzio is a global value that is set in another section of code and is not null (I debugged it) 

    if (_tipo_indennizzo == null) 
     return; 

    var _assicurazione_controparte = $('#_ddlAssicurazioneControparte option:selected').val(); 
    var _assicurazione_cedente = $('#_ddlAssicurazioneCedente option:selected').val(); 
    var _assicurazione_pagante = null; 

    if (_tipo_indennizzo == "DIRETTO") 
     _assicurazione_pagante = _assicurazione_cedente; 
    else if (_tipo_indennizzo == "TRADIZIONALE") 
     _assicurazione_pagante = _assicurazione_controparte; 
    else 
     return; 

    var _assicurazione_pagante_selezionata = $('select#_ddlAssicurazionePagante option:selected').val(); 

    if (isBlank(_assicurazione_pagante_selezionata) || (_assicurazione_pagante_selezionata != _assicurazione_pagante)) 
    { 
     var _result = confirm("warning ?"); 

     // If the user answer 'yes' to the confirm dialog the third DDL should be set to the 'correct' value 

     if (_result == true) { 
      $('#_ddlAssicurazionePagante option:selected').val(_assicurazione_pagante); 
     } 
    } 
} 

К сожалению, это не работает ... значение, кажется, установлены правильно (исключение не выбрасывается), но на самом деле DDL оказывается в веб-страница не обновляется.

Где я ошибаюсь? Кстати, я работаю с jquery 2.1.3 и jquery-ui 1.11.2:

<script type="text/javascript" src="../Scripts/jquery-2.1.3.js"></script> 
<script type="text/javascript" src="../Scripts/jquery-ui-1.11.2.js"></script> 

Thnx

ответ

1

В текущем коде, вы получаете и установить значение выбранного элемента каждого DropDownList. Вы должны получить и установить значение самого DropDownList:

var _assicurazione_controparte = $('#_ddlAssicurazioneControparte').val(); 
var _assicurazione_cedente = $('#_ddlAssicurazioneCedente').val(); 

... 

$('#_ddlAssicurazionePagante').val(_assicurazione_pagante); 
+0

Я думаю, что я тоже пробовал это без успеха. в любом случае, я попробую еще раз ... – weirdgyn

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