C# 更好的方式显示月-年日历模型并与用户交互

C# 更好的方式显示月-年日历模型并与用户交互,c#,javascript,ajax,asp.net-mvc,asp.net-mvc-3,C#,Javascript,Ajax,Asp.net Mvc,Asp.net Mvc 3,我解决了我的任务,但我不喜欢它的工作方式。它看起来对我来说太重了。如果你能建议我一个更好的方法来做同样的事情,那就太棒了 所以我的痛苦是:)我在SQL DB中有一个表,其中包含包含业务数据的图表,它们是由单独的部门开发的,并且它们是随机添加的(至少在我看来是这样)。年份范围是1995-2012年(3),但这两个日期都应该是灵活的,因为每个下个月都会出现新的数据,他们会尝试为过去添加更多的数据 现在看起来是这样的: 为了实现这一目标,我创建了以下模型: using System; using S

我解决了我的任务,但我不喜欢它的工作方式。它看起来对我来说太重了。如果你能建议我一个更好的方法来做同样的事情,那就太棒了

所以我的痛苦是:)我在SQL DB中有一个表,其中包含包含业务数据的图表,它们是由单独的部门开发的,并且它们是随机添加的(至少在我看来是这样)。年份范围是1995-2012年(3),但这两个日期都应该是灵活的,因为每个下个月都会出现新的数据,他们会尝试为过去添加更多的数据

现在看起来是这样的:

为了实现这一目标,我创建了以下模型:

using System;
using System.Collections.Generic;

namespace MvcApplication1.Models
{
    [Serializable]
    public class MonthlyModel
    {
        public int TypeId { get; set; }
        public List<YearDTO> Items { get; set; }
    }

    [Serializable]
    public class YearDTO
    {
        public DateTime Year { get; set; }
        public MonthDTO January { get; set; }
        public MonthDTO February { get; set; }
        public MonthDTO March { get; set; }
        public MonthDTO April { get; set; }
        public MonthDTO May { get; set; }
        public MonthDTO June { get; set; }
        public MonthDTO July { get; set; }
        public MonthDTO August { get; set; }
        public MonthDTO September { get; set; }
        public MonthDTO October { get; set; }
        public MonthDTO November { get; set; }
        public MonthDTO December { get; set; }
    }
    [Serializable]
    public class MonthDTO
    {
        public DateTime start { get; set; }
        public DateTime end { get; set; }
        public int priceTypeId { get; set; }
        public bool IsEnabled { get; set; }
        public bool IsSelected { get; set; }
    }

}
使用系统;
使用System.Collections.Generic;
名称空间MVCAPApplication1.Models
{
[可序列化]
公共类月模型
{
公共int类型ID{get;set;}
公共列表项{get;set;}
}
[可序列化]
公课年
{
公共日期时间年{get;set;}
公历一月至一月{get;set;}
公历月至二月{get;set;}
公历三月{get;set;}
公历四月{get;set;}
公共MonthDTO可以{get;set;}
公历六月{get;set;}
公历七月{get;set;}
公历八月{get;set;}
公历月至九月{get;set;}
公历月至十月{get;set;}
公历11月{get;set;}
公历月至十二月{get;set;}
}
[可序列化]
公营班车
{
公共日期时间开始{get;set;}
公共日期时间结束{get;set;}
public int priceTypeId{get;set;}
公共布尔值已启用{get;set;}
公共布尔值被选为{get;set;}
}
}
这是一个控制器,它包含GetMethod以显示如上所示的视图,以及Post方法以获取此模型并解析它并使用图表创建视图

    using System;
    using System.Collections.Generic;
    using System.Web.Mvc;
    using MvcApplication1.Models;

    namespace MvcApplication1.Controllers
    {

        public class HistoricalController : Controller
        {
            [HttpGet]
            public ActionResult Monthly()
            {
                int typeId = -1;
                try
                {
                    typeId = Convert.ToInt32(RouteData.Values["id"]);
                }
                catch (Exception)
                {

                }
                MonthlyModel mm;
                if (Session[String.Format("MonthlySelect{0}", typeId)] != null)
                {
                    mm = (MonthlyModel)Session[String.Format("MonthlySelect{0}", typeId)];
                }
                else
                {
                    mm = GetMonthlyModel(typeId);
                }
                return View(mm);
            }

            private MonthlyModel GetMonthlyModel(int typeId)
            {
                MonthlyModel mm = new MonthlyModel();
                var list = ChartManager.GetAvailableMonthlyCharts(typeId, 1, 3, new DateTime(1995, 1, 1), DateTime.Today);

                foreach (Tuple<DateTime, DateTime, bool, int> val in list)
                {
                    var start = val.Item1;
                    var end = val.Item2;
                    var exists = val.Item3;
                    var pti = val.Item4;

                    var items = mm.Items ?? (mm.Items = new List<YearDTO>());
                    int idx = items.FindIndex(f => f.Year.Year == start.Year);
                    if (idx == -1)
                    {
                        items.Add(new YearDTO { Year = new DateTime(start.Year, 1, 1) });
                        idx = items.FindIndex(f => f.Year.Year == start.Year);
                    }
                    switch (start.Month)
                    {
                        case 1:
                            items[idx].January = new MonthDTO { start = start, end = end, priceTypeId = pti, IsEnabled = exists, IsSelected = false };
                            break;
                        case 2:
                            items[idx].February = new MonthDTO { start = start, end = end, priceTypeId = pti, IsEnabled = exists, IsSelected = false };
                            break;
                        case 3:
                            items[idx].March = new MonthDTO { start = start, end = end, priceTypeId = pti, IsEnabled = exists, IsSelected = false };
                            break;
                        case 4:
                            items[idx].April = new MonthDTO { start = start, end = end, priceTypeId = pti, IsEnabled = exists, IsSelected = false };
                            break;
                        case 5:
                            items[idx].May = new MonthDTO { start = start, end = end, priceTypeId = pti, IsEnabled = exists, IsSelected = false };
                            break;
                        case 6:
                            items[idx].June = new MonthDTO { start = start, end = end, priceTypeId = pti, IsEnabled = exists, IsSelected = false };
                            break;
                        case 7:
                            items[idx].July = new MonthDTO { start = start, end = end, priceTypeId = pti, IsEnabled = exists, IsSelected = false };
                            break;
                        case 8:
                            items[idx].August = new MonthDTO { start = start, end = end, priceTypeId = pti, IsEnabled = exists, IsSelected = false };
                            break;
                        case 9:
                            items[idx].September = new MonthDTO { start = start, end = end, priceTypeId = pti, IsEnabled = exists, IsSelected = false };
                            break;
                        case 10:
                            items[idx].October = new MonthDTO { start = start, end = end, priceTypeId = pti, IsEnabled = exists, IsSelected = false };
                            break;
                        case 11:
                            items[idx].November = new MonthDTO { start = start, end = end, priceTypeId = pti, IsEnabled = exists, IsSelected = false };
                            break;
                        case 12:
                            items[idx].December = new MonthDTO { start = start, end = end, priceTypeId = pti, IsEnabled = exists, IsSelected = false };
                            break;
                    }
                }

                mm.metalId = typeId;
                return mm;
            }

            [HttpPost]
            public ActionResult MonthlyCharts(MonthlyModel model)
            {
                List<ChartDTO> list = new List<ChartDTO>();

                foreach (YearDTO dto in model.Items)
                {
                    var val = dto.January;
                    if (val.IsSelected) list.Add(ChartManager.GetChart(val.start, val.end, model.metalId, 1, val.priceTypeId));
                    val = dto.February;
                    if (val.IsSelected) list.Add(ChartManager.GetChart(val.start, val.end, model.metalId, 1, val.priceTypeId));
                    val = dto.March;
                    if (val.IsSelected) list.Add(ChartManager.GetChart(val.start, val.end, model.metalId, 1, val.priceTypeId));
                    val = dto.April;
                    if (val.IsSelected) list.Add(ChartManager.GetChart(val.start, val.end, model.metalId, 1, val.priceTypeId));
                    val = dto.May;
                    if (val.IsSelected) list.Add(ChartManager.GetChart(val.start, val.end, model.metalId, 1, val.priceTypeId));
                    val = dto.June;
                    if (val.IsSelected) list.Add(ChartManager.GetChart(val.start, val.end, model.metalId, 1, val.priceTypeId));
                    val = dto.July;
                    if (val.IsSelected) list.Add(ChartManager.GetChart(val.start, val.end, model.metalId, 1, val.priceTypeId));
                    val = dto.August;
                    if (val.IsSelected) list.Add(ChartManager.GetChart(val.start, val.end, model.metalId, 1, val.priceTypeId));
                    val = dto.September;
                    if (val.IsSelected) list.Add(ChartManager.GetChart(val.start, val.end, model.metalId, 1, val.priceTypeId));
                    val = dto.October;
                    if (val.IsSelected) list.Add(ChartManager.GetChart(val.start, val.end, model.metalId, 1, val.priceTypeId));
                    val = dto.November;
                    if (val.IsSelected) list.Add(ChartManager.GetChart(val.start, val.end, model.metalId, 1, val.priceTypeId));
                    val = dto.December;
                    if (val.IsSelected) list.Add(ChartManager.GetChart(val.start, val.end, model.metalId, 1, val.priceTypeId));
                }
                Session[String.Format("MonthlySelect{0}", model.metalId)] = model;
                ModelState.Clear();
                return View(list);
            }
        }
    }
使用系统;
使用System.Collections.Generic;
使用System.Web.Mvc;
使用mvcapapplication1.模型;
命名空间MVCAPApplication1.Controllers
{
公共类历史控制器:控制器
{
[HttpGet]
公众行动结果月刊()
{
int-typeId=-1;
尝试
{
typeId=Convert.ToInt32(RouteData.Values[“id”]);
}
捕获(例外)
{
}
月模型mm;
if(Session[String.Format(“MonthlySelect{0}”,typeId)]!=null)
{
mm=(MonthlyModel)会话[String.Format(“MonthlySelect{0}”,typeId)];
}
其他的
{
mm=GetMonthlyModel(类型ID);
}
返回视图(mm);
}
private MonthlyModel GetMonthlyModel(int-typeId)
{
MonthlyModel mm=新的MonthlyModel();
var list=ChartManager.GetAvailableMonthlyCharts(typeId,1,3,new DateTime(1995,1,1),DateTime.Today);
foreach(列表中的元组值)
{
var start=val.Item1;
var end=val.Item2;
var exists=val.Item3;
var pti=val.Item4;
var items=mm.items???(mm.items=newlist());
int idx=items.FindIndex(f=>f.Year.Year==start.Year);
如果(idx==-1)
{
添加(newyeardto{Year=新日期时间(start.Year,1,1)});
idx=items.FindIndex(f=>f.Year.Year==start.Year);
}
开关(开始月份)
{
案例1:
items[idx].January=new MonthDTO{start=start,end=end,priceTypeId=pti,IsEnabled=exists,IsSelected=false};
打破
案例2:
items[idx]。二月=新的月份到{start=start,end=end,priceTypeId=pti,IsEnabled=exists,IsSelected=false};
打破
案例3:
items[idx].March=new MonthDTO{start=start,end=end,priceTypeId=pti,IsEnabled=exists,IsSelected=false};
打破
案例4:
items[idx].April=new MonthDTO{start=start,end=end,priceTypeId=pti,IsEnabled=exists,IsSelected=false};
打破
案例5:
items[idx].May=new MonthDTO{start=start,end=end,priceTypeId=pti,IsEnabled=exists,IsSelected=false};
打破
案例6:
items[idx].June=new MonthDTO{start=start,end=end,priceTypeId=pti,IsEnabled=exists,IsSelected=false};
打破
案例7:
items[idx].July=new MonthDTO{start=start,end=end,priceTypeId=pti,IsEnabled=exists,IsSelected=false};
打破
案例8:
items[idx].August=new MonthDTO{start=start,end=end,priceTypeId=pti,IsEnabled=exists,IsSelected=false};
打破
案例9:
items[idx].Septer=new MonthDTO{start=start,end=end,priceTypeId=pti,IsEnabled=exists,IsSelected=false};
打破
案例10:
items[idx].October=new MonthDTO{start=start,end=end,priceTypeId=pti,IsEnabled=exists,
    @model MvcApplication1.Models.MonthlyModel

    @{
        ViewBag.Title = "Monthly charts ";
        Layout = "~/Views/Shared/_Layout.cshtml";
    }

    <h2>@(ViewBag.Title)</h2>

    <div id="choice-container">
       @using (Html.BeginForm("MonthlyCharts", "Historical", FormMethod.Post))
    {
        @Html.TextBox("metalId", Model.metalId, new { @type = "hidden" })
        <table>
            <tr>
                <th> Year</th>
                <th> January</th>
                <th> February</th>
                <th> March</th>
                <th> April</th>
                <th> May</th>
                <th> June</th>
                <th> July</th>
                <th> August</th>
                <th> September</th>
                <th> October</th>
                <th> November</th>
                <th> December</th>
                <th> </th>
            </tr>
            @for (int i = 0; i < Model.Items.Count(); i++)
            {
                <tr>
                    <td>
                        @Html.Label("Items[" + i + "].Year", Model.Items[i].Year.ToString(@"yyyy"))
                        @Html.TextBox("Items[" + i + "].Year", Model.Items[i].Year, new { @type = "hidden" })
                    </td>
                    <td>
                        <div align=center class="editor-field">
                            @if (Model.Items[i].January.IsEnabled)
                            {
                                @Html.CheckBox("Items[" + i + "].January.IsSelected", Model.Items[i].January.IsSelected, new { @class = "chk" })
                            }
                            else
                            {
                                @Html.CheckBox("Items[" + i + "].January.IsSelected", Model.Items[i].January.IsSelected, new { @disabled = "disabled" })
                            }
                            @Html.TextBox("Items[" + i + "].January.IsEnabled", Model.Items[i].January.IsEnabled, new { @type = "hidden" })
                            @Html.TextBox("Items[" + i + "].January.start", Model.Items[i].January.start, new { @type = "hidden" })
                            @Html.TextBox("Items[" + i + "].January.end", Model.Items[i].January.end, new { @type = "hidden" })
                            @Html.TextBox("Items[" + i + "].January.priceTypeId", Model.Items[i].January.priceTypeId, new { @type = "hidden" })
                        </div>
                    </td>
                    @*
                      .... 11 times ....
                      *@
                </tr>
            }

        </table>


    <input type="submit" class="button" value="Get the image"/>
    }
    </div>
new DateTime(2010, 8, 1).ToString("MMM", CultureInfo.InvariantCulture);