回发后查询字符串缺失值

querystring missing value after postback

我正在使用 webcam.js 使用 asp.net 网络表单应用从网络摄像头获取照片。问题是,我想根据 "ID" 查询字符串获取文件名。但是每次我点击 "shoot" 按钮,查询字符串值什么都没有。

这是我的完整 HTML :

<%@ Page Language="vb" AutoEventWireup="false"  CodeBehind="Coba.aspx.vb" Inherits="myWebcam.Coba" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
    <script src='<%=ResolveUrl("~/Plugin/jquery.webcam.js")%>' type="text/javascript"></script>
    <script type="text/javascript">
        var pageUrl = '<%=ResolveUrl("~/Coba.aspx")%>';
        $(function (){
           $("#Camera").webcam({
                 width: 320,
                 height: 240,
                 mode: "save",
                 swffile: '<%=ResolveUrl("Plugin/jscam.swf")%>',
                 onTick: function () { },
                 onSave: function () {
                 },
                 onCapture: function () {
                     webcam.save(pageUrl);
                 },
                 debug: function () { },
                 onLoad: function () { }
             });
        });

        function Capture() {

            webcam.capture();

            return false;
        };
     </script>
</head>
<body>
    <form id="form1" runat="server">

    <div>
    <h2>Index</h2>

    <input type="button" value="Shoot!" onclick="Capture()" />
    <div id="Camera"></div>
    </div>
    </form>
</body>
</html>

这是我的 asp.net 代码隐藏:

Imports System.IO
Imports System.Web.Services

Public Class Coba
    Inherits System.Web.UI.Page
    Public sID As String

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        sID = Request.QueryString("id")


        If Not Page.IsPostBack Then

            Capture(Trim(sID))
        End If
    End Sub
    Public Sub Capture(ByVal mID As String)
        Dim stream = Request.InputStream
        Dim dump As String

        If stream.Length > 0 Then

            Using reader = New StreamReader(stream)
                dump = reader.ReadToEnd()
            End Using

            Dim path = Server.MapPath("~/" & Trim(mID) & ".jpg")
            System.IO.File.WriteAllBytes(path, String_To_Bytes2(dump))
        End If
    End Sub

    Private Function String_To_Bytes2(strInput As String) As Byte()
        Dim numBytes As Integer = (strInput.Length) / 2
        Dim bytes As Byte() = New Byte(numBytes - 1) {}

        For x As Integer = 0 To numBytes - 1
            bytes(x) = Convert.ToByte(strInput.Substring(x * 2, 2), 16)
        Next

        Return bytes
    End Function
End Class

我第一次 运行 页面时,我可以从查询字符串中获取 "id" 值。拍摄按钮触发回发和 运行 "Capture" 子但 "id" 查询字符串 returns 什么都没有。

这个问题有什么解决办法吗?

我试过代码,我认为有一个错误的概念。该插件似乎没有附加任何 QueryString。您的 ID 始终为 Nothing。调试了一下,发现QueryString中没有添加ID的踪迹。

文件名是您根据自己的逻辑分配给自己的属性。 Here is a complete example in which the ID is not recovered.

即使在 official page of the plugin 中也没有通过 Querystring 引用 ID。


其他的,界面和保存过程不要使用同一个页面。页面加载总是被调用,即使在加载界面时你也会调用Capture(Trim(sID))

我认为你必须更改这一行:

var pageUrl = '<%=ResolveUrl("~/Coba.aspx")%>';

var pageUrl = '<%=ResolveUrl("~/Coba_SaveImage.aspx")%>';

并且您所有的代码隐藏都在页面 Coba_SaveImage.aspx 中。在不需要页面加载的情况下,If Not Page.IsPostBack Then 始终是回发。

希望对您有所帮助。