ASPXを学ぼうとしてWebサイトをやっています(勉強目的)
リスト内の名前をクリックすると、グリッド ビューに従業員リストが表示されます。値を db に渡して、詳細を別のページに表示する必要があります。このコードを使用してこれを行いました
LinkButton lnkCustomerID = sender as LinkButton;
string strCustomerID = lnkCustomerID.CommandArgument;
Response.Redirect("EmployeeDetail.aspx?Parameter=" + strCustomerID);
うまくいきました。
詳細ページでは、別のグリッドに詳細を表示しています。以下のコードを使用してこれを行いました
SqlCommand cmdCustomerDetails = new SqlCommand("GetEmployee", sqlConnect);
cmdCustomerDetails.CommandType = CommandType.StoredProcedure;
cmdCustomerDetails.Parameters.AddWithValue("@ID", employeeId);
if (sqlConnect.State == ConnectionState.Closed)
sqlConnect.Open();
//Create DataReader to read the record
SqlDataReader dReader = cmdCustomerDetails.ExecuteReader();
GridView2.DataSource = dReader;
GridView2.DataBind();
sqlConnect.Close();
それも機能しましたが、示されているようにアイテムテンプレートである更新ボタンをクリックして値を更新しようとすると
<asp:GridView ID="GridView2" runat="server" CellPadding="4" ForeColor="#333333" GridLines="None"
AutoGenerateColumns="False">
<Columns>
<asp:TemplateField HeaderText="Name">
<ItemTemplate>
<asp:TextBox ID="txtName" runat="server" Text='<%# Eval("name")%>'></asp:TextBox>
<asp:RequiredFieldValidator ID="rqdfldName" runat="server" ErrorMessage="Name Cannot Be Empty"
ViewStateMode="Disabled" ControlToValidate="txtName" ValidationGroup="Update"></asp:RequiredFieldValidator>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Age">
<ItemTemplate>
<asp:TextBox ID="txtAge" runat="server" Text='<%# Eval("age")%>'></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Address">
<ItemTemplate>
<asp:TextBox TextMode="MultiLine" ID="txtAddress" runat="server" Text='<%# Eval("address")%>'></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<ItemTemplate>
<asp:Button ID="btnUpdate" runat="server" Text="Update" ValidationGroup="Update"
CommandArgument='<%#Eval("id") %>' OnClick="btnUpdate_Click" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
<AlternatingRowStyle BackColor="White" />
<EditRowStyle BackColor="#7C6F57" />
<FooterStyle BackColor="#1C5E55" Font-Bold="True" ForeColor="White" />
<HeaderStyle BackColor="#1C5E55" Font-Bold="True" ForeColor="White" />
<PagerStyle BackColor="#666666" ForeColor="White" HorizontalAlign="Center" />
<RowStyle BackColor="#E3EAEB" />
<SelectedRowStyle BackColor="#C5BBAF" Font-Bold="True" ForeColor="#333333" />
<SortedAscendingCellStyle BackColor="#F8FAFA" />
<SortedAscendingHeaderStyle BackColor="#246B61" />
<SortedDescendingCellStyle BackColor="#D4DFE1" />
<SortedDescendingHeaderStyle BackColor="#15524A" />
</asp:GridView>
このエラーが発生しています
ポストバックまたはコールバック引数が無効です。イベントの検証は、設定で使用するか、ページで <%@ Page EnableEventValidation="true" %> を使用して有効にします。セキュリティ上の目的で、この機能は、ポストバック イベントまたはコールバック イベントへの引数が、それらを最初にレンダリングしたサーバー コントロールから発信されていることを確認します。データが有効で期待される場合は、ClientScriptManager.RegisterForEventValidation メソッドを使用して、検証のためにポストバックまたはコールバック データを登録します。
誰でも私を助けてくれませんか
このようにそのページのプロパティをfalseに設定することで、そのエラーを克服できました
<%@ Page Title="" Language="C#" MasterPageFile="~/MasterPage.master" EnableEventValidation="false" AutoEventWireup="true" CodeFile="EmployeeDetail.aspx.cs" Inherits="EmployeeDetail" %>
しかし、更新ボタンをクリックしてコントロールの値を見つけても、値が更新されません
int empID;
string age, address, name;
Button btnUpdateUser = sender as Button;
TextBox tbName, tbAge, tbAddress;
SqlConnection sqlConnect;
try
{
tbName = (TextBox)GridView2.Rows[0].FindControl("txtName");
tbAge = (TextBox)GridView2.Rows[0].FindControl("txtAge");
tbAddress = (TextBox)GridView2.Rows[0].FindControl("txtAddress");
sqlConnect = new SqlConnection("server=WINNER-PC\\SQLEXPRESS;integrated security=true;initial catalog=Test");
if (sqlConnect.State == ConnectionState.Closed)
sqlConnect.Open();
empID = Convert.ToInt32(btnUpdateUser.CommandArgument);
name = tbName.Text;
age = tbAge.Text;
address = tbAddress.Text;
SqlCommand sqlCommand = new SqlCommand("UpdateEmployee", sqlConnect);
sqlCommand.CommandType = CommandType.StoredProcedure;
sqlCommand.Parameters.AddWithValue("@ID", empID);
sqlCommand.Parameters.AddWithValue("@Name", name);
sqlCommand.Parameters.AddWithValue("@Age", age);
sqlCommand.Parameters.AddWithValue("@Address", address);
sqlCommand.ExecuteNonQuery();
Response.Redirect("Employees.aspx", false);
}
catch (Exception ex)
{
throw ex;
}
両方のグリッド ビューが同じページにあるときは更新できましたが、2 番目のグリッドを新しいページに移動したときに更新が機能しません。助けてください