附加文本以下载从DB填充的选项

时间:2012-09-10 13:10:01

标签: asp.net-mvc

我正在MVC应用程序中构建一个页面,其中包含一个下拉框,允许用户从多个财务周期中选择一个。

为了让我们的用户更清楚,我想将“(当前)”附加到当前财务期间的选项中,并可能将“(最新)”附加到上一期间以表示上次完整期。我们已经可以确定我们所处的财政期间以及随后的财务期间等等。

所以,让我们说我想要追加的两个选项目前看起来像这样:

  • 第11期
  • 第12期

我希望他们阅读:

  • 第11期(最新)
  • 第12期(当前)

下拉列表是从数据库中填充的,但我想在应用程序级别附加此文本。

这是可能的吗?如果是这样,怎么样?关于如何去做,我有点不知所措。

感谢您提前提供任何帮助。

1 个答案:

答案 0 :(得分:1)

我假设您在模型/视图模型类中使用某种IEnumerable来填充下拉列表中的项目。构建此列表时,只需在将模型返回到视图之前添加“(当前)”和“(最新)”选项。如果FinancialPeriod是这样的模型/视图模型类:

public class FinancialPeriod{
    public int FinancialPeriodId { get; set; }
    public string DisplayText { get; set; }
}

然后你可以在控制器中执行此操作,假设从数据库中检索到的所有财务期间列表都是模型中名为FinancialPeriods的属性:

public ActionResult Index(){
    var model = GetTheModel();
    model.FinancialPeriods.Add(new FinancialPeriod{ 
        FinancialPeriodId = <something>, 
        DisplayText = "(Current)"
    };
    model.FinancialPeriods.Add(new FinancialPeriod{
        FinancialPeriodId = <somethingElse>
        DisplayText = "(Latest)"
    };
    return View(model);
}

确保在将模型发布回控制器时替换正确解释的<something><somethingElse>值。

修改 - 根据您的评论和修改,这样更合适:

public ActionResult Index(){
    var model = GetTheModel();
    var currentMonth = DateTime.Now.Month;
    var previousMonth = currentMonth - 1;
    if (previousMonth == 0)
        previousMonth = 12;
    var currentPeriod = "Period " + currentMonth.ToString();
    var latestPeriod = "Period " + previousMonth.ToString();
    var newList = new List<FinancialPeriod>();
    foreach(var period in model.FinancialPeriods){
        if(period.DisplayText == currentPeriod)
        {
            newList.Add(new FinancialPeriod
                { 
                    FinancialPeriodId = period.FinancialPeriodId,
                    DisplayText = period.DisplayText + " (Current)"
                };
                continue;
        }
        if(period.DisplayText == latestPeriod) 
        {
            newList.Add(new FinancialPeriod
                {
                    FinancialPeriodId = period.FinancialPeriodId, 
                    DisplayText = period.DisplayText + " (Latest)"
                };
            continue;
        }
        newList.Add(period);
    }
    model.FinancialPeriods = newList;
    return View(model);
}