类不返回对象

时间:2014-02-12 01:00:30

标签: c# asp.net return-value

它没有识别我的lstSectionNumber(Tickets.TicketForm.lastSectionNumber由于其保护级别而无法访问)。希望我能清楚地解释一切,我刚刚开始学习C#,任何帮助都会受到赞赏。提前谢谢。

public class TicketOrder
{
    private static int premiumTicket = 40;
    private static int basicTicket = 20;
    private static int serviceCharge = 2;
    private TicketForm form = new TicketForm();

    public double CalcTicketCost(int section, double quantity)
    {
        double amount = 0;
        if (int.Parse(form.lstSectionNumber.SelectedItem.Value) <= 150)
        {
            amount = (quantity*premiumTicket) + (quantity*serviceCharge);
            return amount;
        }
        else
        {
            amount = (quantity*basicTicket) + (quantity*serviceCharge);
        }
        return amount;
    }
}

代码隐藏:

public partial class TicketForm : System.Web.UI.Page
{
    int myInt;

    public const double premiumTicket = 40;
    public const double basicTicket = 20;
    public const double serviceCharge = 2;
    TicketUser user = new TicketUser();
    TicketOrder order = new TicketOrder();

    protected void Page_Load(object sender, EventArgs e)
    {
        // This disables the unobtrusive validation in order to see the result

        this.UnobtrusiveValidationMode = System.Web.UI.UnobtrusiveValidationMode.None;

            // This will keep my five numbers in my list box without adding more with a refresh of a page
            if (!IsPostBack)
            {

                Random RandomSection = new Random();
                for (int i = 0; i < 5; i++)
                {
                    // Created a list box with five random numbers from 1 to 300
                    myInt = RandomSection.Next(1, 300);
                    lstSectionNumber.Items.Add(myInt.ToString());

                }
            }

    }

    protected void btnSubmit_Click(object sender, EventArgs e)
    {
        // I also added TextMode="Number"to my <asp:TextBox ID="txtNumberOfTickets" 
        //  runat="server" Height="18px" Width="134px"></asp:TextBox> code in order
        // to get rid of an error incase I left my txtNumberOfTicket empty
        int section = Convert.ToInt32(lstSectionNumber.SelectedValue);

    double ticketQuantity = Convert.ToInt32(txtNumberOfTickets.Text);


    //This label displays users first and last names, number of tickers, seat section number and ticket price
    lblPrice.Text = txtFirstName.Text + " " + 
                    txtLastName.Text + ", " + 
                    txtNumberOfTickets.Text + " " + 
                    "Tickets in Section:" + " " + 
                    lstSectionNumber.SelectedValue + "," + 
                    " Total Cost is: " + 
                    order.CalcTicketCost(section, ticketQuantity).ToString("C");
  }

    protected void btnCreateAccount_Click(object sender, EventArgs e)
    {
        user.firstName = txtFirstName.Text;
        user.lastName = txtLastName.Text;
        user.username = txtUserName.Text;
        lblCreateAccount.Text = user.CreateAccount();
    }
}

2 个答案:

答案 0 :(得分:1)

简单地给你的构造函数一个空体

更改

public TicketOrder() 

public TicketOrder() { }

要解决您的其他问题,您正在尝试创建一个新页面,但asp.NET已经为此页面加载了一个页面并为您填充了值。您应该将当前页面对象传递给TicketOrder构造函数并保存。

像这样:

public TicketOrder(TicketForm form)
{
    this.form = form;
}

并更改TicketOrder

private TicketForm form = new TicketForm();

private TicketForm form;

并更改TicketForm

TicketOrder order = new TicketOrder();

TicketOrder order;
public TicketForm()
{
    this.order = new TicketOrder(this);
}

答案 1 :(得分:0)

好吧,我明白了。

 if (section <= 150)
   { amount = (quantity * premiumTicket) + (quantity * serviceCharge);
    return amount;