无法使用Eval将查询字符串传递给genericHandler

时间:2012-12-14 23:23:36

标签: c# asp.net visual-studio-2010 asp.net-4.0 generic-handler

我将查询字符串从数据库传递给我的用于图像转换的通用处理程序。 我在设计师页面上遇到以下问题

       <asp:TemplateField>
        <ItemTemplate>
      <asp:Image ID="Image1" runat="server" ImageUrl='<%# ImageHandler.ashx?IMG_ID=Eval("Image_ID")+ &IMG_type_ID=Eval("Type_ID_FK") %>' />
          </ItemTemplate>
       </asp:TemplateField>

我在ImageUrl上遇到了问题。

以下是我的主要设计师代码

 <form id="form1" runat="server">
<div style="width: 960px; height: 100%; padding: 0; margin: 0; font-size: 0.875em;
    line-height: 1.785em;">
    <div>
        <asp:Panel ID="Panel1" runat="server">
            <h1>
                Welcome To Blue Marine! Please login with your account</h1>
            <br />
            <h2>
                Login Area
            </h2>
            <div>
                Username
                <asp:TextBox ID="txt_username" runat="server" ControlToValidate=" txt_username"></asp:TextBox><span>*</span><asp:RequiredFieldValidator
                    ID="RequiredFieldValidator1" runat="server" ErrorMessage="Please Enter Valid Entry"
                    ControlToValidate="txt_username"></asp:RequiredFieldValidator>
                <br />
                Password
                <asp:TextBox ID="txt_password" runat="server"></asp:TextBox><span>*</span><asp:RequiredFieldValidator
                    ID="RequiredFieldValidator2" runat="server" ControlToValidate="txt_password"
                    ErrorMessage="Please Enter Valid Entry"></asp:RequiredFieldValidator>
                <br />
                <div style="margin-left: 90px">
                    <asp:Button ID="btn_Submit" runat="server" Text="Submit" OnClick="btn_Submit_Click" />
                </div>
        </asp:Panel>
    </div>
    <div>
        <asp:Panel ID="Panel2" runat="server" Visible="False">
            <div style="text-align: right">
                Hello!
                <asp:Label ID="lb_username" runat="server" Text="Label"></asp:Label>
                <br />
                <div>
                    <asp:LinkButton ID="Linkbtn_signout" runat="server" OnClick="Linkbtn_signout_Click">SignOut</asp:LinkButton>
                </div>
            </div>
            <div style="text-align: left">
                <h1>
                    Image Upload Section</h1>
                <p>
                    You can upload Images here One at a time Format Supported JPG,BMP,PNG
                    <br />
                </p>
                &nbsp;<asp:TextBox ID="txtName" runat="server"></asp:TextBox>
                <asp:FileUpload ID="FileUpload1" runat="server" /><br />
                <asp:SqlDataSource ID="SqlDataSource_ImageType" runat="server" ConnectionString="<%$ ConnectionStrings:db_string2 %>"
                    SelectCommand="SELECT [Type_ID_PK], [TypeName] FROM [ImageType]"></asp:SqlDataSource>
                <br />
                Select Image Type&nbsp;
                <asp:DropDownList ID="DropDownList1" runat="server" DataSourceID="SqlDataSource_ImageType"
                    DataTextField="Type_ID_PK" DataValueField="Type_ID_PK">
                </asp:DropDownList>
                <span>*</span>
                <asp:RequiredFieldValidator ID="RequiredFieldValidator3" runat="server" ErrorMessage="Select Image Type"
                    ControlToValidate="DropDownList1"></asp:RequiredFieldValidator>
                <br />
                <asp:Button ID="btnUpload" runat="server" OnClick="btnUpload_Click" Text="Upload" /><br />
                <br />
                <asp:Label ID="lblMessage" runat="server"></asp:Label><br />
                <br />
                <br />
                <div style="text-align: center; margin-left: 170px">
                    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataSourceID="SqlDataSource_DbImage"
                        EnableModelValidation="True" AllowPaging="True" AllowSorting="True" Width="566px"
                        DataKeyNames="Image_ID,Type_ID_FK">
                        <Columns>
                            <asp:BoundField DataField="Image_ID" HeaderText="Image_ID" InsertVisible="False"
                                ReadOnly="True" SortExpression="Image_ID" />
                            <asp:BoundField DataField="Type_ID_FK" HeaderText="Type_ID_FK" SortExpression="Type_ID_FK"
                                ReadOnly="True" />
                            <asp:BoundField DataField="ImageName" HeaderText="ImageName" SortExpression="ImageName" />
                            <asp:TemplateField>
                                <ItemTemplate>
                                    <asp:Image ID="Image1" runat="server" ImageUrl='<%# ImageHandler.ashx?IMG_ID=Eval("Image_ID")+ &IMG_type_ID=Eval("Type_ID_FK") %>' />
                                </ItemTemplate>
                            </asp:TemplateField>
                        </Columns>
                    </asp:GridView>
                </div>
                <asp:SqlDataSource ID="SqlDataSource_DbImage" runat="server" ConnectionString="<%$ ConnectionStrings:db_string2 %>"
                    SelectCommand="SELECT * FROM [Image_Link]"></asp:SqlDataSource>
            </div>
        </asp:Panel>
    </div>
</div>
</form>

我的代码背后:

  public partial class Admin : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (Session.Count > 0)
        {
            try
            {
                string id = Convert.ToString(Session["UserID"]);
                if (id != "")
                {
                    if (!IsPostBack)
                    {
                        Panel1.Visible = false;
                        Panel2.Visible = true;
                    }
                    else
                    {
                        Panel1.Visible = false;
                        Panel2.Visible = true;
                    }
                }
            }
            catch (NullReferenceException n)
            {

            }


        }
        else
        {
            if (!IsPostBack)
            {
                Panel1.Visible = true;
            }
        }
    }

    protected void btn_Submit_Click(object sender, EventArgs e)
    {
        Session.Clear();
        bool result = Check_User_Login(txt_username.Text, txt_password.Text);
        if (result == true)
        {
            Panel1.Visible = false;
            Panel2.Visible = true;
        }
        else
        {
            Response.Write("<script>alert('Admin Account Does not exist!');</script>");
        }





    }


    public bool Check_User_Login(string para_name, string para_password)
    {
        string db_username, dp_password;
        Web_Eng.DatabaseConection.comm = new SqlCommand("Select Top  1 a.Admin_ID From [Admin] a  Order By a.Admin_ID Desc;", Web_Eng.DatabaseConection.connect());
        int id = (int)Web_Eng.DatabaseConection.comm.ExecuteScalar();
        for (int i = 1; i <= id; i++)
        {
            Web_Eng.DatabaseConection.comm.CommandText = "select a.Admin_Name,a.[Password] from [Admin] a where a.Admin_ID=" + i + ";";

            #region use to retrieve whole row from database

            Web_Eng.DatabaseConection.entrieRow_Reader = Web_Eng.DatabaseConection.comm.ExecuteReader();
            while (Web_Eng.DatabaseConection.entrieRow_Reader.Read())
            {

                db_username = Web_Eng.DatabaseConection.entrieRow_Reader["Admin_Name"].ToString();
                dp_password = Web_Eng.DatabaseConection.entrieRow_Reader["Password"].ToString();

                if (db_username == para_name && dp_password == para_password)
                {

                    Session["UserID"] = i;
                    lb_username.Text = db_username;
                    Web_Eng.DatabaseConection.entrieRow_Reader.Close();
                    return true;

                }

            }
            Web_Eng.DatabaseConection.entrieRow_Reader.Close();


            #endregion
        }
        return false;
    }

    protected void Linkbtn_signout_Click(object sender, EventArgs e)
    {
        Session.Clear();
        Page.Response.Redirect("Index.aspx");
    }

    protected void btnUpload_Click(object sender, EventArgs e)
    {
        string strImageName = txtName.Text.ToString();
        if (FileUpload1.PostedFile != null && FileUpload1.PostedFile.FileName != "")
        {
            byte[] imageSize = new byte[FileUpload1.PostedFile.ContentLength];
            HttpPostedFile uploadedImage = FileUpload1.PostedFile;
            uploadedImage.InputStream.Read(imageSize, 0, (int)FileUpload1.PostedFile.ContentLength);


            // Create SQL Command 
            int id=Convert.ToInt32(DropDownList1.SelectedItem.Value);
            int result = AddImage_DB(strImageName, id, imageSize);
            if (result > 0)
                lblMessage.Text = "File Uploaded";
            GridView1.DataBind();
        }
    }



    public int AddImage_DB(string para_imagename, int para_typeID, byte[] para_image)
    {
        try
        {
            //DatabaseConection.cmd.con;
            Web_Eng.DatabaseConection.cmd.Connection = Web_Eng.DatabaseConection.connect();
            Web_Eng.DatabaseConection.cmd = new SqlCommand("Insert_Image_Table", Web_Eng.DatabaseConection.connect());
            Web_Eng.DatabaseConection.cmd.CommandType = CommandType.StoredProcedure;
            Web_Eng.DatabaseConection.cmd.Parameters.Add(new SqlParameter("@typeID", SqlDbType.Int)).Value = para_typeID;
            Web_Eng.DatabaseConection.cmd.Parameters.Add(new SqlParameter("@ImageName", SqlDbType.NVarChar)).Value = para_imagename;
            Web_Eng.DatabaseConection.cmd.Parameters.Add(new SqlParameter("@convertedImage", SqlDbType.Image, para_image.Length)).Value = para_image;
            Web_Eng.DatabaseConection.cmd.ExecuteNonQuery();
            return 1;
        }
        catch (Exception er)
        {

            Response.Write("<script>alert('Error');</script>");
            return 0;
        }
    }
}

我的通用处理程序

 public class ImageHandler : IHttpHandler
{

    public void ProcessRequest(HttpContext context)
    {

        // Create SQL Command 
        Web_Eng.DatabaseConection.comm = new SqlCommand("Select img.ImageName,img.CompleteImage from Image_Link img where img.Image_ID=@IMG_ID and img.Type_ID_FK=@IMG_type_ID;", Web_Eng.DatabaseConection.connect());
        Web_Eng.DatabaseConection.cmd.CommandType = System.Data.CommandType.Text;

        // Img ID
        SqlParameter ImageID = new SqlParameter("@IMG_ID", System.Data.SqlDbType.Int);
        ImageID.Value = context.Request.QueryString["IMG_ID"];

        // iMG Type ID
        SqlParameter Image_Type_ID = new SqlParameter("@IMG_type_ID", System.Data.SqlDbType.Int);
        Image_Type_ID.Value = context.Request.QueryString["IMG_type_ID"];


        // Adding Parameters
        Web_Eng.DatabaseConection.cmd.Parameters.Add(ImageID);
        Web_Eng.DatabaseConection.cmd.Parameters.Add(Image_Type_ID);

        SqlDataReader dReader = Web_Eng.DatabaseConection.cmd.ExecuteReader();
        dReader.Read();
        context.Response.BinaryWrite((byte[])dReader["CompleteImage"]);
        dReader.Close();
    }

    public bool IsReusable
    {
        get
        {
            return false;
        }
    }
}

在将查询字符串传递给我的处理程序

时,不知道我做错了什么

先谢谢

3 个答案:

答案 0 :(得分:0)

请尝试以下语法:

<asp:Image ID="Image1" runat="server" ImageUrl='ImageHandler.ashx?IMG_ID=<%# Eval("Image_ID")+&IMG_type_ID=Eval("Type_ID_FK") %>' />

答案 1 :(得分:0)

谢谢大家,我已经解决了我自己的问题,我正在为其他可能遇到同样问题的人发布答案,这将有助于他们

只需替换

<asp:Image ID="Image1" runat="server" ImageUrl='<%# ImageHandler.ashx?IMG_ID=Eval("Image_ID")+ &IMG_type_ID=Eval("Type_ID_FK") %>' />

通过

<asp:Image ID="Image1" runat="server" ImageUrl='<%# "ImageHandler.ashx?IMG_ID=" + Eval("Image_ID")+"&IMG_type_ID="+Eval("Type_ID_FK")%>' />

答案 2 :(得分:0)

public void ProcessRequest(HttpContext context)
    {
        using (SqlConnection connection = new SqlConnection())
        {
            connection.ConnectionString = "Server=ESLHP280G1P\\SQLEXPRESS; Database=Sample; user id=sa; password=sa@123";
            connection.Open();
            SqlCommand cmd = new SqlCommand("tblImage_Retrieve", connection);
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.AddWithValue("@id", context.Request.QueryString["id"]);
            SqlDataReader dr = cmd.ExecuteReader();
            while (dr.Read())
            {
                byte[] bytes = (byte[])dr["photo"];
                if (bytes.Length > 0 && bytes != null)
                {
                    context.Response.ContentType = "jpg";
                    context.Response.BinaryWrite(bytes);
                }
            }
        }
    }