如何将所选数据从视图传递到控制器,然后再从控制器传递回视图

时间:2018-07-24 15:23:06

标签: c# asp.net asp.net-mvc

我正在尝试在视图中显示选定的值。我正在选择一个年份,并将该值传递给控制器​​以过滤记录。同样,我需要将该值传递给视图以显示选择的值或年份。我过滤记录没有问题。我的问题是我需要显示选择的年份。我该怎么办?

运行应用程序时,我会得到

System.InvalidOperationException:传递到字典中的模型项的类型为'MyRecords.Models.ModelYear',但是此字典需要类型为'System.Collections.Generic.List`1 [MyRecords.Models.RecordsList的模型项] ]”。

Herer是我的代码。

索引视图

@model List<MyRecord.Models.RecordList>



var year = DateTime.Now.Year;
for (var i = year; i > 2012; i--)
{
    var j = @i - 1;
    <div class="col-md-1 ">
        @Html.ActionLink(i.ToString(), "MyPage", new { i = i })
    </div>
}

//在这里,我显示的是我选择的年份,例如2010年和2010年的记录

<h3>@ModelYear.Year</h3> 
@foreach (var groupMonth in Model.GroupBy(recordLists => new { recordLists.date.Value.Year, recordLists.date.Value.Month }))
{
    <h3 class="monthHeader"> @System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(groupMonth.Key.Month)</h3>
    foreach (var recordLists in groupMonth)
    {
        <div class="row">
            @Html.Partial("_PartialView", recordList)
        </div>
    }
}

控制器

public ActionResult Archives(int i = 0)
{
    var recordLists = new List<RecordList>();

    if(i == 0)
        recordLists = _db.recordlists
            .Where(p => p.date.Value.Year == DateTime.Now.Year)
            .OrderByDescending(p => p.date)
            .ToList();
    else
        recordLists = _db.recordlists
            .Where(p => p.date.Value.Year == i)
            .OrderByDescending(p => p.date)
            .ToList();

     return View(new ModelYear{Records = recordLists, Year = i});
}

型号:

命名空间MyRecord.Models

{

using System;
using System.Collections.Generic;

公共局部类RecordList     {

    public int id { get; set; }
    public string title { get; set; }
    public Nullable<System.DateTime> date { get; set; }
}

public class ModelYear
{
    public int Year { get; set; }

    public List<RecordList> Records { get; set; }
}

}

1 个答案:

答案 0 :(得分:1)

基于评论

1)在@model列表上的视图模型@model列表中更改

2)新模型包含数据年份和记录列表,您可以放入所需的内容。

您只需要记住模型是分层的而不是平坦的

foreach (var groupMonth in Model.RecordList.GroupBy(recordLists => new { recordLists.date.Value.Year, recordLists.date.Value.Month }))