0

我正在尝试做某种条件语句来计算一个值。为了模拟我的数据,我在我的控制器中(临时)分配值以查看我的 UI 是如何进行的。我可以在视图中的功能块中执行计算,但它很长并且不属于那里。所以,我现在正在尝试在模型(Calculations.cs)中进行计算。

计算代码的工作原理是传递一个值,除了我的条件失败并传递了默认值,0即它应该何时传递基于控制器中的模拟值的另一个值。

这里是Calculations.cs

public class Calculations
{
    PriceQuote price = new PriceQuote();
    StepFilingInformation filing = new StepFilingInformation();
    public decimal Chapter7Calculation
    {
        get
        {
            return
                price.priceChapter7
                +
                ((ReferenceEquals
                    (filing.PaymentPlanRadioButton,
                    Models.StepFilingInformation.PaymentPlan.Yes))
                ?
                price.pricePaymentPlanChapter7
                :
                0);
        }

    }
}

我最初(filing.PaymentPlanRadioButton == Models.StepFilingInformation.PaymentPlan.Yes)检查单选按钮是否设置为“是”,但将其更改为ReferenceEquals. 这不影响结果。

我让我的控制器将值分配PaymentPlanRadioButton给“是”,因此pricePaymentPlanChapter7应该将值添加到priceChapter7,但事实并非如此。相反,添加“0”作为回退到条件。PaymentPlanRadioButton即使我在控制器中分配它也是 null 。

我无法弄清楚如何解决这个问题。如果我在模型中分配它并让它工作,这将无法解决问题,因为当我删除模拟控制器并期望用户选择一个单选按钮时,它仍然是null并且条件将失败。

这是“模拟”控制器:

public class QuoteMailerController : Controller
{
    public ActionResult EMailQuote()
    {
        Calculations calc = new Calculations();
        var total = calc.Chapter7Calculation;

        QuoteData quoteData = new QuoteData
        {
            StepFilingInformation = new Models.StepFilingInformation
            {
                //"No" is commented out, so "Yes" is assigned
                //PaymentPlanRadioButton = 
                    //Models.StepFilingInformation.PaymentPlan.No,
                PaymentPlanRadioButton = 
                    Models.StepFilingInformation.PaymentPlan.Yes,
            }
         };
    }
}

这是我存储价格的地方(PriceQuote.cs):

public class PriceQuote
{
    public decimal priceChapter7 { get { return 799; } }
    public decimal pricePaymentPlanChapter7 { get { return 100; } }
}

这是我的视图模型:

public class QuoteData
{
    public PriceQuote priceQuote;
    public Calculations calculations;
    public StepFilingInformation stepFilingInformation { get; set; }
    public QuoteData()
    {
        PriceQuote = new PriceQuote();
        Calculations = new Calculations();
    }
}

因此,这应该工作的方式是 799 + 100 = 899,因为PaymentPlan.Yes它被指定为控制器中单选按钮的值。但相反,我得到的只是 799 (799 + 0),因为当我调试时PaymentPlanRadioButton出现空值。

有什么想法/指导吗?

以防万一,这是PaymentPlanRadioButton位于内部StepFilingInformation.cs(并且是我的模型之一):

public enum PaymentPlan
{
    No,
    Yes
}
public class PaymentPlanSelectorAttribute : SelectorAttribute
{
    public override IEnumerable<SelectListItem> GetItems()
    {
        return Selector.GetItemsFromEnum<PaymentPlan>();
    }
}       
[PaymentPlanSelector(BulkSelectionThreshold = 3)]
public PaymentPlan? PaymentPlanRadioButton { get; set; }

对不起,长度。

4

1 回答 1

1

您的 Calculations 类基于它包含的 StepFilingInformation 对象进行数学运算。但是,您永远不会将 Calculations 中的 StepFilingInformation 设置为新的空对象以外的任何内容。

您的构造函数可能需要 StepFilingInformation 类型的参数。

public class Calculations
{
    StepFilingInformation filing;
    public Calculations(StepFilingInformation filing)
    {
       this.filing = filing;
    } 

无论您如何向计算类传递对 StepFilingInformation 的引用,都必须在运行依赖于它的计算之前设置此值。

此外,如果 QuoteData 是您的 ViewModel,那么它不应包含对您的 Calculations 类的引用。它应该只包含在视图必须显示的计算类中创建的结果。

StepFilingInformation filing = new Models.StepFilingInformation
{
    PaymentPlanRadioButton = Models.StepFilingInformation.PaymentPlan.Yes,
};

Calculations calc = new Calculations(filing);
var total = calc.Chapter7Calculation;

QuoteData quoteData = new QuoteData //Only include Properties you're going to display in the view model
{
    Total = total
};
于 2012-05-22T20:00:30.687 回答