我正在MVC应用程序中构建一个页面,其中包含一个下拉框,允许用户从多个财务周期中选择一个。
为了让我们的用户更清楚,我想将“(当前)”附加到当前财务期间的选项中,并可能将“(最新)”附加到上一期间以表示上次完整期。我们已经可以确定我们所处的财政期间以及随后的财务期间等等。
所以,让我们说我想要追加的两个选项目前看起来像这样:
我希望他们阅读:
下拉列表是从数据库中填充的,但我想在应用程序级别附加此文本。
这是可能的吗?如果是这样,怎么样?关于如何去做,我有点不知所措。
感谢您提前提供任何帮助。
答案 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);
}