Это может быть повторяющийся вопрос, но ни один из них не помог мне.
У меня есть 10-20 дел, представляющих категории. Каждый div имеет атрибут rel, содержащий идентификатор категории. Весь код находится внутри UpdatePanel.
Я хочу обновить идентификаторы выбранных категорий (нажал div) в базе данных. Существует asp: TextBox и asp: нажатие кнопки, по которой я буду устанавливать выбранное значение в текстовом поле.
<asp:TextBox ID="lbSelectedCategories" CssClass="lbSelectedCategories" runat="server"></asp:TextBox>
Для этого я добавил следующий jQuery код:
$(".area-interest-list li").on('click', function () {
$(this).toggleClass("active");
copySelectedCategoriesToLabel();
});
function copySelectedCategoriesToLabel() {
var selectedCategoryIds = [];
$(".area-interest-list").find('li').get().forEach(function (item, index, array) {
var selectedCategoryId = $(item).attr('rel');
if ($(item).attr('class') == 'active') {
selectedCategoryIds.push(selectedCategoryId);
}
});
// Remove last ,
var strSelectedCategoryIds = selectedCategoryIds.join(',');
$(".lbSelectedCategories").text(strSelectedCategoryIds);
}
Я попробовал обе функции text () и val (). Я вижу, что значения правильно устанавливаются в textobx, но когда я пытаюсь прочитать на Button_Click, я получаю пустое значение.
string lbSelectedCategories = lbSelectedCategories.Text;
Возможно, обратная передача на UpdatePanel теряет значения textobx.
Я прочитал, что метки не сохраняют свои значения, но для меня, текстовое поле или скрытое поле не сохраняют свои значения .
Обновить код панели
<asp:UpdatePanel ID="updatePanelCategories" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"><span class="ti-close"></span></button>
<asp:Button runat="server" ID="btnSaveCategory" class="btn btn-style-red" Text="Save" OnClick="btnSaveCategory_Click"></asp:Button>
<h4>Areas Of Interest</h4>
</div>
<div class="modal-body">
<asp:Repeater ID="repeaterResourceCategory" runat="server" OnItemDataBound="repeaterResourceCategory_ItemDataBound">
<HeaderTemplate>
<div class="area-interest-list">
<ul>
</HeaderTemplate>
<ItemTemplate>
<li class="" rel='<%# Eval("ItemID") %>' id="liSelected" runat="server">
<span class="icon-cloud-computing" runat="server" id="spIcon" rel='<%# Eval("IsSelected") %>'></span>
<p runat="server" id="pText"><%# Eval("CategoryName") %></p>
</li>
</ItemTemplate>
<AlternatingItemTemplate>
<li class="" rel='<%# Eval("ItemID") %>' id="liSelected" runat="server">
<span class="icon-cloud-computing" runat="server" id="spIcon" rel='<%# Eval("IsSelected") %>'></span>
<p runat="server" id="pText"><%# Eval("CategoryName") %></p>
</li>
</AlternatingItemTemplate>
<FooterTemplate>
</ul>
</div>
</FooterTemplate>
</asp:Repeater>
<asp:TextBox ID="lbSelectedCategories" CssClass="lbSelectedCategories" runat="server" style="width:1px;height:1px;"></asp:TextBox>
</div>
</ContentTemplate>
</asp:UpdatePanel>
Код кнопки
protected void btnSaveCategory_Click(object sender, EventArgs e)
{
AddSelectedCategories();
}
private void AddSelectedCategories()
{
UserInfo userInfo = MembershipContext.AuthenticatedUser;
string[] arSelectedCategories = lbSelectedCategories.Text.Split(',');
if (arSelectedCategories.Length > 0)
{
using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["CMSConnectionString"].ConnectionString))
{
con.Open();
for (int i = 0; i < arSelectedCategories.Length; i++)
{
string sql = @"insert into sometable(UserID, ResourceCategoryID) values(" + userInfo.UserID + "," + arSelectedCategories[i] + ")";
SqlCommand cmd = new SqlCommand(sql, con);
cmd.ExecuteNonQuery();
}
con.Close();
}
}
}
Что я здесь не так делаю?