Скрытое поле возвращается как пустое в исходном коде

#javascript #c# #jquery #asp.net #gridview

#javascript #c# #jquery #asp.net #просмотр сетки

Вопрос:

У меня есть gridview, в котором информация для этой сетки вводится текстовыми полями. Затем я нажимаю кнопку сохранения, и эта информация сохраняется в таблице. Для одного из этих текстовых полей открывается меню. Пользователь выбирает кредитора из меню, и идентификатор кредитора сохраняется в скрытом поле.

 <td class="tblAddDetail" style="border-right:2px">
   <a style="float:left;width:16px;height:16px;margin-right:0px;left:0px;top:1px" title="Pick from list..." class="iconSearch" id="btnAddDetailCreditor"></a>
   <asp:HiddenField ID="hfCreditorID" runat="server"  />
   <input type="text" id="txtAddEditCreditorCode" class="lookuppopup" onblur="CheckCreditorAccountDetail(this.value)" style="text-transform:uppercase;width:80px" runat="server"/>
 </td> 
  

Когда пользователь выбирает кредитора из списка, запускается эта функция, которая заполняет текстовое поле именем, а скрытое поле идентификатором:

 function CheckCreditorAccountDetail(AC) {
            //AJAX Save
            if ($.trim(AC).length) {
                PageMethods.GetCreditorAccountCode(AC,
                                            OnCheckCreditorDetail,
                                            null
                                            );
            }
        }

 function OnCheckCreditorDetail(result) {
 $('#<%= hfCreditorID.ClientID %>').val(result.ID);
            $('#<%= txtAddEditCreditorCode.ClientID %>').val(result.AccountCode);
}
  

Он вызывает a WebMethod , который находит кредитора в базе данных:

 [WebMethod]
    public static Creditor GetCreditorAccountCode(string AccountCode)
    {
        try
        {
            Creditor c = new Creditor(AccountCode);
            return c;
        }
        catch (Exception ex)
        {
            return new Creditor();
        }
    }
  

Если WebMethod возвращает значение, оно заполняет скрытое поле и текстовое поле. Так result же как и кредитор, и вызов result.AccountCode дает код учетной записи кредиторов и т. Д.

Но когда я пытаюсь вызвать это скрытое поле в исходном коде, оно всегда остается пустым:

 if (!int.TryParse(hfCreditorID.Value, out tmpCredID))
{
    valid = false;
}
  

Проблема в том, что когда я нажимаю кнопку сохранения, это приводит к возврату записи, поэтому я теряю все значения. Это не скрытое поле теряет свое значение, текстовое поле также возвращается пустым

Комментарии:

1. this.value это просто текст, строка, в нем не будет ID поля

2. @Andrey Он находит значение идентификатора, из result.ID которого оно имеет значение. Это просто число. Проблема заключается в том, что вызов hfCreditorID.Value в исходном коде возвращается как пустое

3. @Andrey Пожалуйста, посмотрите мой отредактированный вопрос. Я пропустил некоторые функции, но, надеюсь, это лучше объясняет проблему

Ответ №1:

Похоже, вы смешиваете / пытаетесь смешать javascript и C #, используемые в исходном коде.

Вы отправляете result (это строка в javascript, как уже указал Андрей) и пытаетесь получить доступ к несуществующим свойствам. result.AccountCode ?

Имена ваших функций javascript не совпадают CheckCreditorAccountDetail и OnCheckCreditorDetail .

Зачем скрытое поле, если вы можете получить значения непосредственно из текстового поля в исходном коде? Рабочий пример см. в моем фрагменте.

На странице .aspx:

 <asp:HiddenField ID="hfCreditorID" runat="server" />
<asp:TextBox ID="txtAddEditCreditorCode" runat="server" onblur="OnCheckCreditorDetail(this.value)"></asp:TextBox>

<script type="text/javascript">
    function OnCheckCreditorDetail(result) {
        $('#<%= hfCreditorID.ClientID %>').val(result);
     }
</script>
  

И в исходном коде:

     protected void Button1_Click(object sender, EventArgs e)
    {
        txtAddEditCreditorCode.Text = hfCreditorID.Value   " - OK";
        //or just get the values from the TextBox without a HiddenField
        txtAddEditCreditorCode.Text = txtAddEditCreditorCode.Text   " - OK";
    }
  

Комментарии:

1. Пожалуйста, посмотрите мой отредактированный вопрос. Я пропустил некоторые функции, но, надеюсь, это лучше объясняет проблему

2. Я пытался использовать текстовые поля вместо скрытого поля, но теряет свое значение

3. Попробуйте создать пустую страницу только с моим фрагментом. Если это сработает, создайте оттуда. Вероятно, вы где-то теряете значения при обратной передаче.