Wybacz mi, ale jestem nowicjuszem .NET. Wiem, że musi być na to sposób.
Mam widok szczegółów z ustawionym trybem domyślnymwstawić. Ma być używany jako formularz dla użytkowników do wprowadzania rekordów do bazy danych. W przypadku dwóch pól chcę wstępnie wypełnić pole informacjami. W szczególności mam skrypt vb z kilkoma funkcjami do wysyłania zapytań do usługi Active Directory w celu zwrócenia nazwy użytkownika na podstawie jego identyfikatora użytkownika. Ten skrypt działa dobrze.
Wołam funkcje dla nazwy użytkownika w ten sposób:
<InsertItemTemplate>
<asp:TextBox ID="txtUserID" runat="server" Text="<%#CurrentUID() %>"></asp:TextBox>
</InsertItemTemplate>
<InsertItemTemplate>
<asp:TextBox ID="txtUserName" runat="server" Text="<%# GetUserName(CurrentUID()) %>"></asp:TextBox>
</InsertItemTemplate>
Po załadowaniu strony wypełnia to pola tekstowe identyfikatorem użytkownika i nazwą użytkownika.
Ale po przesłaniu formularza wartości w polach tekstowych nie są wstawiane do bazy danych.
Jak mogę ustawić wartości domyślne dla pól, gdy wartości pochodzą z funkcji?
Dzięki za pomoc!
Odpowiedzi:
5 dla odpowiedzi № 1Widok szczegółów nie wie, z którym polem bazy danych się powiązać. Zmieniłbym pole tekstowe w szablonie, aby powiązać z polem i ustawić domyślną wartość w kodzie:
<InsertItemTemplate>
<asp:TextBox ID="txtUserID" runat="server" Text="<%#Bind("UserIDField") %>"></asp:TextBox>
</InsertItemTemplate>
<InsertItemTemplate>
<asp:TextBox ID="txtUserName" runat="server" Text="<%#Bind("UserNameField") %>"></asp:TextBox>
</InsertItemTemplate>
Protected Sub DetailsView_DataBound(ByVal sender As Object, ByVal e As System.EventArgs) Handles DetailsView.DataBound
If DetailsView.CurrentMode = DetailsViewMode.Insert Then
DirectCast(DetailsView.FindControl("txtUserID"), TextBox).Text=CurrentUID()
DirectCast(DetailsView.FindControl("txtUserName"), TextBox).Text=GetUserName(CurrentUID())
End If
End Sub