powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Большой вопрос - маленький ответ.
3 сообщений из 3, страница 1 из 1
Большой вопрос - маленький ответ.
    #34146301
LastSerzh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть таблица в БД - справочник пользователей. Есть WEB-форма с расположенными на ней двумя DataSource'ами, GreedView и DetailView, соединенные между собой так, как описано в статье "Обзор DetailsView" . Все это замечательно работает без единой строчки кода. За исключением одного момента. В таблице пользователей хранится, кроме прочего, MD5-хэш пароля (это поле в таблице установлено в not null). Встал вопрос: Как реализовать добавление/изменение пароля в DetailsView? Для решения этого вопроса в DetailsView был добавлен TemplateField:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
<asp:TemplateField HeaderText="Пароль" SortExpression="pass_hash">
	<EditItemTemplate>
		<asp:TextBox ID="txtPass_Edit" runat="server" TextMode="Password"></asp:TextBox>
		<asp:TextBox ID="txtPass_Edit_" runat="server" Text='<%# Bind("Pass_Hash") %>' Visible="False"></asp:TextBox>
	</EditItemTemplate>
	<InsertItemTemplate>
		<asp:TextBox ID="txtPass_Insert" runat="server" TextMode="Password" ></asp:TextBox>
		<asp:HiddenField ID="hfPass_Insert" runat="server" Value='<%# Bind("Pass_Hash") %>' />					 
	</InsertItemTemplate>
	<ItemTemplate>
		<asp:Label ID="Label1" runat="server" Text="***********"></asp:Label>
	</ItemTemplate>
</asp:TemplateField>
Написаны две функции: для вставки
Код: plaintext
1.
2.
3.
4.
5.
private void Insert()
{
	TextBox tbx = (TextBox)dtvUser.FindControl("txtPass_Insert");
	HiddenField hf = (HiddenField)dtvUser.FindControl("hfPass_Insert");
	hf.Value = GetMD5Hash(tbx.Text);
}
и аналогичная для редактирования
Код: plaintext
1.
2.
3.
4.
5.
private void Update()
{
	TextBox tbx = (TextBox)dtvUser.FindControl("txtPass_Edit");
	HiddenField hf = (HiddenField)dtvUser.FindControl("hfPass_Edit");
	hf.Value = GetMD5Hash(tbx.Text);
}
где GetMD5Hash - моя функция, dtvUser - DetailsView, dsUser - SqlDataSource, привязанный к dtvUser.
Эти функции пробовал вызывать и из событий dsUser_Inserting, dsUser_Updating и из событий dtvUser_ItemInserting, dtvUser_ItemUpdating. Код работает, данные пишутся в HiddenField. Но! При вставке вываливается исключение: System.Data.SqlClient.SqlException: Cannot insert the value NULL into column 'Pass_Hash', table 'base.dbo.Users'; column does not allow nulls. INSERT fails.
При update исключения не выбрасываются, но и пароль не меняется.
Видимо принудительная запись в HiddenField.Value не переносится в параметры SQLDataSource.
Вставку записей с хешем мне всё-таки удалось осуществить, причем даже не используя HiddenField:
Код: plaintext
1.
2.
3.
4.
protected void dsUser_Inserting(object sender, SqlDataSourceCommandEventArgs e)
{
	TextBox tbx = (TextBox)dtvUser.FindControl("txtPass_Insert");
	dsUser.InsertParameters["Pass_Hash"].DefaultValue = GetMD5Hash(tbx.Text);
}
. Но при Update такой фокус не проходит.
Вопрос: Куда копнуть? Можно просто указать направление :) Заранее спасибо.
...
Рейтинг: 0 / 0
Большой вопрос - маленький ответ.
    #34146403
На update инициализируете UpdateParameters ?
Посмотрите в sqlprofiler какой запрос и с какими параметрами выполняется?Все должно быть просто, очень просто, настолько просто - насколько это возможно!
 Мой блог Возможно на твой вопрос уже есть ответ? FAQ
...
Рейтинг: 0 / 0
Большой вопрос - маленький ответ.
    #34146691
LastSerzh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Евгений ВеприковНа update инициализируете UpdateParameters ?
Посмотрите в sqlprofiler какой запрос и с какими параметрами выполняется?При update значение нужного мне параметра не изменяется. Т.е. какой хэш считался из таблицы, такой и пишется. А хотелось бы его изменить.
Вопрос в том, что при использовании HiddenField'ов, "прибинденных" к указанному параметру, при изменении их свойства Value, это изменение не отображается в "прибинденном" параметре (вместо HiddenField я пробовал использовать видимый TextBox - результат тот же). Поэтому при update нужный мне параметр передается на сервер без изменений. А при insert он пустой. Поэтому у меня и получилось сделать insert задав DefaultValue.
Может быть можно добраться до значений параметров каким-то другим путем? Напрямую видимо не получается, поскольку у класса System.Web.UI.WebControls.Parameter отсутствуют свойства похожие на Value.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Большой вопрос - маленький ответ.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]