我正在处理连接到SQL服务器的Web窗体应用程序,我正在尝试将数据从一个页面传递到另一个页面。具体来说,我有一个ListView ProjectList.aspx,它将 ProjectID 值传递给FormView ProjectDetails.aspx。我正在尝试设置SQL以捕获此ProjectID作为其WHERE子句的参数。
我的ProjectDetails.aspx数据源定义如下。
<asp:SqlDataSource ID="ProjectDetailsSQL"
runat="server"
ConnectionString="<%$ ConnectionStrings:DBConnectionString %>"
DeleteCommand="DELETE FROM [tblProject] WHERE [ProjectID] = @original_ProjectID"
InsertCommand="INSERT INTO [tblProject]
([ProjectID], [ProjectName], [ProjectAddress],
[ProjectCity], [ProjectState],[ProjectZip])
VALUES (@ProjectID, @ProjectName, @ProjectAddress,
@ProjectCity, @ProjectState, @ProjectZip)"
OldValuesParameterFormatString="original_{0}"
SelectCommand="SELECT [ProjectID], [ProjectName], [ProjectAddress],
[ProjectCity], [ProjectState], [ProjectZip]
FROM [tblProject] WHERE ([ProjectID] = @ProjectID)"
UpdateCommand="UPDATE [tblProject]
SET [ProjectName] = @ProjectName,
[ProjectAddress] = @ProjectAddress,
[ProjectCity] = @ProjectCity,
[ProjectState] = @ProjectState,
[ProjectZip] = @ProjectZip
WHERE [ProjectID] = @original_ProjectID">
<DeleteParameters>
<asp:Parameter Name="original_ProjectID" Type="Int32" />
</DeleteParameters>
<InsertParameters>
<asp:Parameter Name="ProjectID" Type="Int32" />
<asp:Parameter Name="ProjectName" Type="String" />
<asp:Parameter Name="ProjectAddress" Type="String" />
<asp:Parameter Name="ProjectCity" Type="String" />
<asp:Parameter Name="ProjectState" Type="String" />
<asp:Parameter Name="ProjectZip" Type="String" />
</InsertParameters>
<SelectParameters>
<asp:Parameter Name="ProjectID" Type="Int32" />
</SelectParameters>
<UpdateParameters>
<asp:Parameter Name="ProjectName" Type="String" />
<asp:Parameter Name="ProjectAddress" Type="String" />
<asp:Parameter Name="ProjectCity" Type="String" />
<asp:Parameter Name="ProjectState" Type="String" />
<asp:Parameter Name="ProjectZip" Type="String" />
<asp:Parameter Name="original_ProjectID" Type="Int32" />
</UpdateParameters>
我尝试将数据作为路由URL(Servername / Project / 12345),显式URL(Servername / ProjectDetails.aspx?12345)传递并定义参数(Servername / ProjectDetails.aspx?ProjectID = 12345)并且FormView来了空白。如果我从SelectCommand中删除WHERE ([ProjectID] = @ProjectID)
,则FormView会显示该表的第一条记录正常。
我猜测问题不在于传递数据,而是在WHERE子句中捕获我想要传递的内容。是否有其他地方我需要将@ProjectID定义为我想要传递的值?
答案 0 :(得分:0)
这里的问题是SqlDataSource没有参数的值,它根本不知道从哪里拿来。
我不确定SqlDataSource是否可以正常使用url重写,猜测它取决于你实际设置它的方式。但对于后一种选择,你提到了
服务器名/ ProjectDetails.aspx?专案编号= 12345
内置支持。将参数声明为查询字符串1,它将直接从请求的查询字符串中获取:
<SelectParameters>
<asp:QueryStringParameter Name="ProjectID" Type="Int32" QueryStringField="ProjectID" />
</SelectParameters>