如何将图像添加到ASP.NET用户控制器中的图像按钮

发布于 2025-01-28 07:24:53 字数 7631 浏览 4 评论 0原文

我有2个项目。一个是主要的WebForm项目,第二个是用于我的用户控件的库项目。该库不使用文件扩展名ASCX。我必须对此清楚。我的目标是创建一个包含1个文本框,1个图像按钮,2个下拉列表,1个按钮和1个日历的用户控制器。基本上是日期选择器控制器。到目前为止,一切都在起作用。我可以修改日历,居民月(下拉)和年(下拉)。所有按钮和动作都正确地表现了我期望的行为。我单击它时,即使是图像按钮;它显示日历罚款。我在分配ImageUrl属性时遇到了问题。我已经将图像复制到图书馆项目,主项目,而无效。运行主项目时,只是显示一个损坏的图像。两个项目都有相同的文件夹和文件的名称(〜/images/calendar4.png“;)。我在UserController和Main Project中添加了此URL,并且无效。

我在这两个项目上都尝试了以下语法(一次): (在主项目上)

string imgsource = "~/Images/calendar4.png";
ucpCalendar.ImageUrl = imgsource;

我尝试了以下语法:

string FullPathVirtual = Server.MapPath("~/Images/calendar4.png");
ucpCalendar.ImageUrl = FullPathVirtual;

我尝试了此:

string path = (Server.MapPath(".") + "//Images//" + "calendar4.png");
string imgPath = path.Replace("\\", "/").Replace("//", "/");
ucpCalendar.ImageUrl = imgPath ;

这是我的usercontroller代码(我试图进行随机映像搜索以查看它是否找到图片。仍然没有起作用):

public class pCalendar : UserControl
    {
        protected Calendar  cdatepicker;
        protected DropDownList ddrYear;
        protected DropDownList ddrMonth;
        protected ImageButton imbcalendar;
        protected TextBox txtbdatedisplay;
        protected Button btntoday;
        public pCalendar()
        {
            txtbdatedisplay = new TextBox();
            imbcalendar = new ImageButton();
            ddrMonth = new DropDownList();
            ddrYear = new DropDownList();
            btntoday = new Button();
            cdatepicker = new Calendar();
          
           
            Controls.Add(new LiteralControl("<table cellspacing=\"0\" cellpadding=\"0\">"));
            Controls.Add(new LiteralControl("   <tr>"));
            Controls.Add(new LiteralControl("       <td>"));
            Controls.Add(txtbdatedisplay);
            Controls.Add(imbcalendar);
            Controls.Add(new LiteralControl("       </td>"));
            Controls.Add(new LiteralControl("   </tr>"));
            Controls.Add(new LiteralControl("   <tr>"));
            Controls.Add(new LiteralControl("       <td>"));
            Controls.Add(ddrMonth);
            Controls.Add(ddrYear);
            Controls.Add(btntoday);
            Controls.Add(new LiteralControl("       </td>"));
            Controls.Add(new LiteralControl("   </tr>"));
            Controls.Add(new LiteralControl("   <tr>"));
            Controls.Add(new LiteralControl("       <td>"));
            Controls.Add(cdatepicker);
            Controls.Add(new LiteralControl("       </td>"));
            Controls.Add(new LiteralControl("   </tr>"));
            Controls.Add(new LiteralControl("</table>"));

        }
        protected override void OnInit(EventArgs e)
        {
           
            cdatepicker.VisibleDate = cdatepicker.TodaysDate;
            Hide();

            ControllersBasicInfo();
            
            int myYear = System.DateTime.Now.Year;
            int myMonth = System.DateTime.Now.Month;

            for (int i = 0; i < 101; i++)
            {
                ddrYear.Items.Add((myYear - i).ToString());
            }
            ddrYear.SelectedValue = myYear.ToString();
            ddrMonth.SelectedValue = myMonth.ToString();

            ddrMonth.AutoPostBack = true;
            ddrYear.AutoPostBack = true;

            ddrMonth.SelectedIndexChanged += new System.EventHandler(SetCalendarVisibleDate_SelectedIndexChanged);
            ddrYear.SelectedIndexChanged += new System.EventHandler(SetCalendarVisibleDate_SelectedIndexChanged);

            if (AutoPostBack)
            {
                ddrMonth.SelectedIndexChanged += new System.EventHandler(ddl_SelectedIndexChanged);
                ddrYear.SelectedIndexChanged += new System.EventHandler(ddl_SelectedIndexChanged);
              
            }
            imbcalendar.Click+=imbcalendar_Click;
            btntoday.Click += btntoday_Click;
            cdatepicker.SelectionChanged += cdatepicker_SelectionChanged;

            cdatepicker.DayRender += cdatepicker_DayRender;

            base.OnInit(e);
        }

        private void ControllersBasicInfo()
        {
            string FullPathVirtual = PickRandomImage2();
            //imbcalendar.ImageUrl = "~/Images/calendar4.png";
            imbcalendar.ImageUrl = FullPathVirtual;
        }
        private string PickRandomImage2()
        {
            Random rnd = new Random();
            string[] image = Directory.GetFiles(MapPath("~/image"), "*.jpg");
            string imageDisplay = image[rnd.Next(image.Length)];
            return imageDisplay;
        }
        public void BindData()
        {
            BindDataMonth();
        }
  
        public string ImageUrl
        {
            get
            {
                return this.imbcalendar.ImageUrl;
            }
            set
            {
                this.imbcalendar.ImageUrl = value;
            }
        }
}

WebForm代码:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Calendar.aspx.cs" Inherits="IAS.Calendar" %>
<%@ Register Assembly="IAS.Controls" Namespace="IAS.Controls" TagPrefix="uc" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <script src="/scripts/jquery-1.6.4.min.js" type="text/javascript"></script>
      <script src="/scripts/common.min.js" type="text/javascript"></script>
     <script src="/scripts/jquery.extend-1.5.0.min.js" type="text/javascript"></script>
    <script src="/Calendar/jscal2.js" type="text/javascript"></script>
    <link rel="stylesheet" type="text/css" href="/Calendar/CSS/jscal2.css" />
  <link rel="stylesheet" type="text/css" href="/CSS/Common.css" />
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <table>
        <tr>
            <td>
                <uc:pCalendar ID="ucpCalendar" runat="server"></uc:pCalendar>
            </td>
        </tr>
    </table>
    <div>
</form>

C#.Net背后的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using lktec.Utils;

namespace TestCalendar
{
  public partial class Calendar : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                ucpCalendar.BindData();
                //ucpCalendar.ImageUrl = "~/Images/calendar4.png";
             }
        }
   }
}

这是正在发生的事情的图像: 带有其他信息的日历显示

我只对我的问题提出了相关代码。如果您需要完整的代码,请告诉我。这是很多代码。我不确定我在做什么错。

这是要添加的建议的代码: 使用输入标签:

string inputstring = @"<input type=""image""
                alt=""Clear button"" 
                src=""C:/Users/SANOZUKE/Documents/Visual Studio 2013/Projects/MHPPROJECT-English/IAS.root/IAS/IAS/Images/calendar4.png"" 
                onserverclick=""imbcalendar_Click"" 
                runat=""server""
                id=""imbcalendar"" />";

不幸的是,这无效。仍然没有在控制器上显示图像。

这是图片:

I have 2 projects. One is the main webform project and the second is a library project for my user controls. This library doesn't use file extension ascx. I have to be clear on this. My objective is to create an user controller that contains 1 textbox, 1 image button, 2 dropdown, 1 button and 1 calendar. Basically is a date picker controller. So far, everything is working. I can modify the calendar, populate month(dropdown) and year (dropdown). All buttons and actions behave correctly how I expect to behave. Even the image button when I click it; it display the calendar fine. I am having problem assigning the imageurl properties. I have copy the image to the library project, main project and nothing works. When running the main project is just shows a broken image. both project have the same name for the folder and file (~/Images/calendar4.png";). I have added this url in the usercontroller and in the main project and none works.

I have tried the following syntax on both project (one at a time):
(On Main Project)

string imgsource = "~/Images/calendar4.png";
ucpCalendar.ImageUrl = imgsource;

The I tried the following syntax:

string FullPathVirtual = Server.MapPath("~/Images/calendar4.png");
ucpCalendar.ImageUrl = FullPathVirtual;

The I tried this one:

string path = (Server.MapPath(".") + "//Images//" + "calendar4.png");
string imgPath = path.Replace("\\", "/").Replace("//", "/");
ucpCalendar.ImageUrl = imgPath ;

Here is my usercontroller code (I was trying to do a random image search to see if it finds a picture. Still didn't work):

public class pCalendar : UserControl
    {
        protected Calendar  cdatepicker;
        protected DropDownList ddrYear;
        protected DropDownList ddrMonth;
        protected ImageButton imbcalendar;
        protected TextBox txtbdatedisplay;
        protected Button btntoday;
        public pCalendar()
        {
            txtbdatedisplay = new TextBox();
            imbcalendar = new ImageButton();
            ddrMonth = new DropDownList();
            ddrYear = new DropDownList();
            btntoday = new Button();
            cdatepicker = new Calendar();
          
           
            Controls.Add(new LiteralControl("<table cellspacing=\"0\" cellpadding=\"0\">"));
            Controls.Add(new LiteralControl("   <tr>"));
            Controls.Add(new LiteralControl("       <td>"));
            Controls.Add(txtbdatedisplay);
            Controls.Add(imbcalendar);
            Controls.Add(new LiteralControl("       </td>"));
            Controls.Add(new LiteralControl("   </tr>"));
            Controls.Add(new LiteralControl("   <tr>"));
            Controls.Add(new LiteralControl("       <td>"));
            Controls.Add(ddrMonth);
            Controls.Add(ddrYear);
            Controls.Add(btntoday);
            Controls.Add(new LiteralControl("       </td>"));
            Controls.Add(new LiteralControl("   </tr>"));
            Controls.Add(new LiteralControl("   <tr>"));
            Controls.Add(new LiteralControl("       <td>"));
            Controls.Add(cdatepicker);
            Controls.Add(new LiteralControl("       </td>"));
            Controls.Add(new LiteralControl("   </tr>"));
            Controls.Add(new LiteralControl("</table>"));

        }
        protected override void OnInit(EventArgs e)
        {
           
            cdatepicker.VisibleDate = cdatepicker.TodaysDate;
            Hide();

            ControllersBasicInfo();
            
            int myYear = System.DateTime.Now.Year;
            int myMonth = System.DateTime.Now.Month;

            for (int i = 0; i < 101; i++)
            {
                ddrYear.Items.Add((myYear - i).ToString());
            }
            ddrYear.SelectedValue = myYear.ToString();
            ddrMonth.SelectedValue = myMonth.ToString();

            ddrMonth.AutoPostBack = true;
            ddrYear.AutoPostBack = true;

            ddrMonth.SelectedIndexChanged += new System.EventHandler(SetCalendarVisibleDate_SelectedIndexChanged);
            ddrYear.SelectedIndexChanged += new System.EventHandler(SetCalendarVisibleDate_SelectedIndexChanged);

            if (AutoPostBack)
            {
                ddrMonth.SelectedIndexChanged += new System.EventHandler(ddl_SelectedIndexChanged);
                ddrYear.SelectedIndexChanged += new System.EventHandler(ddl_SelectedIndexChanged);
              
            }
            imbcalendar.Click+=imbcalendar_Click;
            btntoday.Click += btntoday_Click;
            cdatepicker.SelectionChanged += cdatepicker_SelectionChanged;

            cdatepicker.DayRender += cdatepicker_DayRender;

            base.OnInit(e);
        }

        private void ControllersBasicInfo()
        {
            string FullPathVirtual = PickRandomImage2();
            //imbcalendar.ImageUrl = "~/Images/calendar4.png";
            imbcalendar.ImageUrl = FullPathVirtual;
        }
        private string PickRandomImage2()
        {
            Random rnd = new Random();
            string[] image = Directory.GetFiles(MapPath("~/image"), "*.jpg");
            string imageDisplay = image[rnd.Next(image.Length)];
            return imageDisplay;
        }
        public void BindData()
        {
            BindDataMonth();
        }
  
        public string ImageUrl
        {
            get
            {
                return this.imbcalendar.ImageUrl;
            }
            set
            {
                this.imbcalendar.ImageUrl = value;
            }
        }
}

the webform code:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Calendar.aspx.cs" Inherits="IAS.Calendar" %>
<%@ Register Assembly="IAS.Controls" Namespace="IAS.Controls" TagPrefix="uc" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <script src="/scripts/jquery-1.6.4.min.js" type="text/javascript"></script>
      <script src="/scripts/common.min.js" type="text/javascript"></script>
     <script src="/scripts/jquery.extend-1.5.0.min.js" type="text/javascript"></script>
    <script src="/Calendar/jscal2.js" type="text/javascript"></script>
    <link rel="stylesheet" type="text/css" href="/Calendar/CSS/jscal2.css" />
  <link rel="stylesheet" type="text/css" href="/CSS/Common.css" />
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <table>
        <tr>
            <td>
                <uc:pCalendar ID="ucpCalendar" runat="server"></uc:pCalendar>
            </td>
        </tr>
    </table>
    <div>
</form>

Code behind C#.net :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using lktec.Utils;

namespace TestCalendar
{
  public partial class Calendar : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                ucpCalendar.BindData();
                //ucpCalendar.ImageUrl = "~/Images/calendar4.png";
             }
        }
   }
}

Here is an image of what is happening:
Calendar display with other info

I have put only relevant code to my issue. If you need the full code please let me know. It is a lot of code. I am not sure what I am doing wrong.

Here is the suggested code to add:
using input tag:

string inputstring = @"<input type=""image""
                alt=""Clear button"" 
                src=""C:/Users/SANOZUKE/Documents/Visual Studio 2013/Projects/MHPPROJECT-English/IAS.root/IAS/IAS/Images/calendar4.png"" 
                onserverclick=""imbcalendar_Click"" 
                runat=""server""
                id=""imbcalendar"" />";

Unfortunately, this didn't work. Still shows no image on the controller.

Here is the picture:
Adding Input Tag

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文