#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. Попробуйте создать пустую страницу только с моим фрагментом. Если это сработает, создайте оттуда. Вероятно, вы где-то теряете значения при обратной передаче.