[英]Visual Studio User Control ASP, C#, Code Behind issue
Okay this is probably a shot in the dark as it would be very difficult to guess what is going on here. 好的,这可能是在黑暗中拍摄的,因为很难猜测这里发生了什么。 But I am running out of options here. 但是我在这里没有选择。
So I have this code behind for a page that a user is able to fill out the input fields that are on the page and then by clicking the submit button, the information is added to the database. 因此,我在页面的后面有此代码,用户可以填写页面上的输入字段,然后单击“提交”按钮,将信息添加到数据库中。 This works 100%. 这有效100%。 However, I want to put this functionality in a user control so I can use it on a different page but have the same effect. 但是,我想将此功能放在用户控件中,以便可以在其他页面上使用它,但效果相同。 However I can't get this to work. 但是我无法使它正常工作。
So here is the working code 所以这是工作代码
The btnSubmit_Click method adds the information to the database without a problem. btnSubmit_Click方法可以毫无问题地将信息添加到数据库中。
Now for the user user control code . 现在为用户提供用户控制代码 。 This doesn't do anything. 这什么也没做。 The only difference I did was that it uses an ASPImageButton, which I had originally just a regular ASPButton but that didn't make a different. 我所做的唯一区别是,它使用了ASPImageButton,我最初只是一个常规的ASPButton,但没有什么不同。
So as I said a shot in the dark. 因此,正如我在黑暗中说的那样。 If anyone has any suggestions on what to try or a fix please let me know. 如果有人对尝试或解决方法有任何建议,请告诉我。 I can provide more information if needed. 如果需要,我可以提供更多信息。
Working Code: 工作代码:
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Linq;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using SenProPOS.Data;
using SenProPOS.Web.Classes;
namespace SenProPOS.Web.Admin.Pages
{
public partial class InventoryMaintenance : BasePage
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
BindInventoryEntries();
}
}
#region Properties
protected int CurrentInventoryID
{
get { return ViewState["CurrentInventoryID"] == null ? -1 : Convert.ToInt32(ViewState["CurrentInventoryID"].ToString()); }
set { ViewState["CurrentInventoryID"] = value; }
}
protected int CurrentInventoryMaintPage
{
get { return ViewState["CurrentInventoryMaintPage"] == null ? 1 : Convert.ToInt32(ViewState["CurrentInventoryMaintPage"].ToString()); }
set { ViewState["CurrentInventoryMaintPage"] = value; }
}
protected int InventoryEntriesPerPage
{
get { return Convert.ToInt32(ViewState["InventoryEntriesPerPage"] as String ?? "25"); }
set { ViewState["InventoryEntriesPerPage"] = value; }
}
#endregion
#region Methods
private void BindInventoryEntries()
{
try
{
using (SenProDataDataContext context = new SenProDataDataContext())
{
var inventories = context.Inventory_Items.ToList();
String search = tbInventorySearch.Text.Trim().ToLower();
if (!String.IsNullOrEmpty(search))
{
inventories = inventories.Where(x => x.Name.ToLower().Contains(search)
|| x.Description.ToLower().Contains(search.ToLower())
|| x.UPC == Convert.ToInt32(search)
|| x.Quantity == Convert.ToInt32(search)
|| (double)x.Price == Convert.ToDouble(search)
|| (double)x.Cost == Convert.ToDouble(search))
.ToList();
}
lvInventories.DataSource = inventories;
lvInventories.DataBind();
if (String.IsNullOrEmpty(this.lvInventories.SortExpression))
{
lvInventories.Sort("Name", SortDirection.Descending);
}
/**
var departments = context.Departments.ToList();
this.ddlDepartment.DataSource = departments;
this.ddlDepartment.DataValueField = "ID";
this.ddlDepartment.DataTextField = "Name";
this.ddlDepartment.DataBind();
var categories = context.Categories.ToList();
this.ddlCategory.DataSource = categories;
this.ddlCategory.DataValueField = "ID";
this.ddlCategory.DataTextField = "Name";
this.ddlCategory.DataBind();
* **/
}
}
catch (Exception ex)
{
;
}
}
private void InventoryEntrySelected(int InventoryID)
{
CurrentInventoryID = InventoryID;
this.tbName.Text = String.Empty;
this.tbUPC.Text = String.Empty;
this.tbDescription.Text = String.Empty;
this.tbQuantity.Text = String.Empty;
this.tbPricePerUnit.Text = String.Empty;
this.tbCostPerUnit.Text = String.Empty;
this.ddlDepartment.SelectedIndex = -1;
this.ddlCategory.SelectedIndex = -1;
if (CurrentInventoryID != -1)
{
using (SenProDataDataContext context = new SenProDataDataContext())
{
var inventory = context.Inventory_Items.SingleOrDefault(x => x.ID == CurrentInventoryID);
if (inventory != null)
{
this.tbName.Text = inventory.Name;
this.tbUPC.Text = inventory.UPC.ToString();
this.tbDescription.Text = inventory.Description;
this.tbQuantity.Text = inventory.Quantity.ToString();
this.tbPricePerUnit.Text = inventory.Price.ToString();
this.tbCostPerUnit.Text = inventory.Cost.ToString();
/** needs fixing yet
var department = this.ddlDepartment.Items.FindByValue(inventory..ToString());
if (department != null)
{
department.Selected = true;
}
var category = this.ddlCategories.Items.FindByValue(inventory.Category.ToString());
if (position != null)
{
position.Selected = true;
}
var category = this.ddlSuppliers.Items.FindByValue(inventory.Category.ToString());
if (supplier != null)
{
supplier.Selected = true;
}
**/
}
else throw new ApplicationException("The specified item was not found.");
}
}
}
#endregion
#region Event Handlers
protected override void OnPreRenderComplete(EventArgs e)
{
base.OnPreRenderComplete(e);
RegisterListViewButtonsForAsyncPostback(lvInventories, "btnInventoryEntryEdit", "btnInventoryEntryDelete");
}
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
this.btnSubmit.Click += new EventHandler(btnSubmit_Click);
this.btnInventoryAdd.Click += new EventHandler(btnInventoryAdd_Click);
this.lvInventories.ItemCommand += new EventHandler<ListViewCommandEventArgs>(lvInventory_ItemCommand);
this.lvInventories.PagePropertiesChanging += new EventHandler<PagePropertiesChangingEventArgs>(lvInventory_PagePropertiesChanging);
this.tbInventorySearch.TextChanged += new EventHandler(tbInventorySearch_TextChanged);
}
void tbInventorySearch_TextChanged(object sender, EventArgs e)
{
BindInventoryEntries();
}
void btnInventoryAdd_Click(object sender, EventArgs e)
{
InventoryEntrySelected(-1);
}
void lvInventory_PagePropertiesChanging(object sender, PagePropertiesChangingEventArgs e)
{
BindInventoryEntries();
}
void lvInventory_ItemCommand(object sender, ListViewCommandEventArgs e)
{
if (e.CommandName.Equals("edit-item"))
{
InventoryEntrySelected(Int32.Parse(e.CommandArgument.ToString()));
}
else if (e.CommandName.Equals("delete-item"))
{
using (SenProDataDataContext context = new SenProDataDataContext())
{
var inv = context.Inventory_Items.SingleOrDefault(x => x.ID == Int32.Parse(e.CommandArgument.ToString()));
if (inv != null)
{
context.Inventory_Items.DeleteOnSubmit(inv);
context.SubmitChanges();
BindInventoryEntries();
}
}
}
else if (e.CommandName.Equals("Sort") || e.CommandName.Equals("Page")) { BindInventoryEntries(); }
}
void btnSubmit_Click(object sender, EventArgs e)
{
if (!Page.IsValid) { return; }
try
{
using (SenProDataDataContext context = new SenProDataDataContext())
{
Inventory_Item inv = null;
if (CurrentInventoryID > 0)
{
inv = context.Inventory_Items.SingleOrDefault(x => x.ID == CurrentInventoryID);
}
else
{
inv = new Inventory_Item();
context.Inventory_Items.InsertOnSubmit(inv);
}
if (inv != null)
{
if (!String.IsNullOrEmpty(this.tbName.Text))
{
inv.Name = this.tbName.Text;
}
else throw new ApplicationException("Invalid Name");
if (!String.IsNullOrEmpty(this.tbUPC.Text))
{
inv.UPC = Convert.ToInt64(this.tbUPC.Text);
}
else throw new ApplicationException("Invalid UPC#");
if (!String.IsNullOrEmpty(this.tbDescription.Text))
{
inv.Description = this.tbDescription.Text;
}
else throw new ApplicationException("Invalid Description");
if (!String.IsNullOrEmpty(this.tbQuantity.Text))
{
inv.Quantity = Convert.ToInt32(this.tbQuantity.Text);
}
else throw new ApplicationException("Invalid Quantity");
if (!String.IsNullOrEmpty(this.tbPricePerUnit.Text))
{
inv.Price = Convert.ToDecimal(this.tbPricePerUnit.Text);
}
else throw new ApplicationException("Invalid Price");
if (!String.IsNullOrEmpty(this.tbCostPerUnit.Text))
{
inv.Cost = Convert.ToDecimal(this.tbCostPerUnit.Text);
}
else throw new ApplicationException("Invalid Cost");
/**
int dep_id = 0;
if (Int32.TryParse(this.ddlDepartment.SelectedValue, out loc_id))
{
inv.Department = dep_id;
}
else throw new ApplicationException("Invalid Department");
int category = 0;
if (Int32.TryParse(this.ddlCategories.SelectedValue, out category))
{
inv.Category = category;
}
else throw new ApplicationException("Invalid Category");
**/
context.SubmitChanges();
BindInventoryEntries();
}
}
}
catch (ApplicationException ax)
{
;
}
}
#endregion
}
}
User Control Code: 用户控制代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using SenProPOS.Data;
namespace SenProPOS.Web.Controls
{
public partial class AddEditInventoryItem : System.Web.UI.UserControl
{
public int? InventoryItemID = -1;
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
BindInventoryItemData();
this.btnSubmit.Click += new ImageClickEventHandler(btnSubmit_Click);
}
}
void btnSubmit_Click(object sender, ImageClickEventArgs e)
{
try
{
using (SenProDataDataContext context = new SenProDataDataContext())
{
Inventory_Item inv = null;
if (InventoryItemID > 0)
{
inv = context.Inventory_Items.SingleOrDefault(x => x.ID == InventoryItemID);
}
else
{
inv = new Inventory_Item();
context.Inventory_Items.InsertOnSubmit(inv);
}
if (inv != null)
{
if (!String.IsNullOrEmpty(this.tbName.Text))
{
inv.Name = this.tbName.Text;
}
else throw new ApplicationException("Invalid Name");
if (!String.IsNullOrEmpty(this.tbUPC.Text))
{
inv.UPC = Convert.ToInt64(this.tbUPC.Text);
}
else throw new ApplicationException("Invalid UPC#");
if (!String.IsNullOrEmpty(this.tbDescription.Text))
{
inv.Description = this.tbDescription.Text;
}
else throw new ApplicationException("Invalid Description");
if (!String.IsNullOrEmpty(this.tbQuantity.Text))
{
inv.Quantity = Convert.ToInt32(this.tbQuantity.Text);
}
else throw new ApplicationException("Invalid Quantity");
if (!String.IsNullOrEmpty(this.tbPricePerUnit.Text))
{
inv.Price = Convert.ToDecimal(this.tbPricePerUnit.Text);
}
else throw new ApplicationException("Invalid Price");
if (!String.IsNullOrEmpty(this.tbCostPerUnit.Text))
{
inv.Cost = Convert.ToDecimal(this.tbCostPerUnit.Text);
}
else throw new ApplicationException("Invalid Cost");
/**
int dep_id = 0;
if (Int32.TryParse(this.ddlDepartment.SelectedValue, out loc_id))
{
inv.Department = dep_id;
}
else throw new ApplicationException("Invalid Department");
int category = 0;
if (Int32.TryParse(this.ddlCategories.SelectedValue, out category))
{
inv.Category = category;
}
else throw new ApplicationException("Invalid Category");
**/
context.SubmitChanges();
BindInventoryItemData();
}
}
}
catch (ApplicationException ax)
{
;
}
}
public void BindInventoryItemData()
{
this.tbName.Text = String.Empty;
this.tbUPC.Text = String.Empty;
this.tbDescription.Text = String.Empty;
this.tbQuantity.Text = String.Empty;
this.tbPricePerUnit.Text = String.Empty;
this.tbCostPerUnit.Text = String.Empty;
this.ddlDepartment.SelectedIndex = -1;
this.ddlCategory.SelectedIndex = -1;
if (InventoryItemID != -1)
{
using (SenProDataDataContext context = new SenProDataDataContext())
{
var inventory = context.Inventory_Items.SingleOrDefault(x => x.ID == InventoryItemID);
if (inventory != null)
{
this.tbName.Text = inventory.Name;
this.tbUPC.Text = inventory.UPC.ToString();
this.tbDescription.Text = inventory.Description;
this.tbQuantity.Text = inventory.Quantity.ToString();
this.tbPricePerUnit.Text = inventory.Price.ToString();
this.tbCostPerUnit.Text = inventory.Cost.ToString();
/** needs fixing yet
var department = this.ddlDepartment.Items.FindByValue(inventory..ToString());
if (department != null)
{
department.Selected = true;
}
var category = this.ddlSuppliers.Items.FindByValue(inventory.Category.ToString());
if (supplier != null)
{
supplier.Selected = true;
}
**/
}
else throw new ApplicationException("The specified item was not found.");
}
}
}
}
}
为什么不尝试将( this.btnSubmit.Click += new ImageClickEventHandler(btnSubmit_Click);)
放在不回发的外部?
Just a guess: Is the AspImageButton named "btnSubmit"? 只是一个猜测:AspImageButton是否命名为“ btnSubmit”? Is the Click event wired up correctly? Click事件是否正确接线?
When you add the control to your page you should use runat=”server” . 将控件添加到页面时,应使用runat =” server”。 I can give you an example 我可以举一个例子
<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true"
CodeFile="Default.aspx.cs" Inherits="_Default" %>
<%@ register Src="~/WebUserControl.ascx" TagName="test" TagPrefix="testTag" %>
<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent">
</asp:Content>
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
<testTag:test id="testId" runat="server" />
</asp:Content>
Please look on, 请看
<testTag:test id="testId" runat="server" />
And be sure in your control u have used something like that 并确保在您的控制下您使用了类似的方法
<asp:ImageButton ID="ImageButton1" runat="server" ImageUrl="~/btn_submit.png"
onclick="ImageButton1_Click" />
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.