【问题标题】:How to display data in div based on which button clicked: C# MVC如何根据单击的按钮在 div 中显示数据:C# MVC
【发布时间】:2018-07-14 04:32:30
【问题描述】:

我正在使用实体框架和 C# 在 MVC 中开发应用程序。当我点击年份时,我想根据月份显示我的所有案例。为了过滤年份,我正在运行 for 循环以获取从 2009 年到当前年份的年份,并像按钮一样显示年份。默认情况下,或者当我第一次进入页面时,我应该能够看到当年的详细信息。当我点击任何一年时,页面应该刷新并获取该点击年份每个月的所有案例。如果我点击 2017 年,我应该只会得到 2017 年有案例的月份。

为了简单理解我在上面的所有岁月就像按钮。当我点击任何年份时,我应该填充该年份的数据。

类似这样的:

查看:

@model List<Magazine.Models.Case>

@{
    ViewBag.Title = "CaseList";
}

<div>
    <div>
         <div class="container">
            <div>

                @{
                    var year = DateTime.Now.Year;
                    for (var i = year; i > 2009; i--)
                    {
                        <div class="col-md-1 ">
                            @Html.ActionLink(i.ToString(), "MyCases/" + i, new { onclick="$('.container').hide(); $('.container.i').show();" })
                        </div>
                    }
                }
            </div>
        </div>

        <div class="container">
            @foreach (var groupMonth in Model.GroupBy(case => new { case.date.Value.Year, case.date.Value.Month }))
            { 
               <h3> @System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(groupMonth.Key.Month)</h3>
                foreach (var case in groupMonth)
                {
                    <div class="row">
                            @case.date
            <div>
                            @case.title
            </div>
            <div>
               @case.description
            </div>  
                    </div>
                }
            }
        </div>

控制器:

public ActionResult MyCases(int year = 0)
{
  var cases = _db.case.Where(p => p.date.Value.Year >= 2009 &&
                  p.pdate.Value.Year <= DateTime.Now.Year)
                      .OrderByDescending(p => p.date).ToList();

  return View(cases);
}

现在在我的代码中,我刚刚添加了年份循环并为此添加了 onclick,但它没有根据年份过滤数据。 我需要获取单击的年份值并将其传递给 foreach 循环以显示单击的年份详细信息。我该怎么做?

【问题讨论】:

  • 我不太明白你的问题。该页面包含可单击的年份列表,在此列表下方,即您的所有案例。如果您点击一年,您会转到另一个页面,该年份的案例点击或在同一页面中刷新?
  • 我想刷新同一页面并显示,而不是转到另一个页面。
  • 我需要将点击的年份(在我的情况下,它是来自 for 循环的值 i)传递给这个 foreach 循环 @foreach (var groupMonth in Model.GroupBy(case => new { case.date. Value.Year, case.date.Value.Month })) 来过滤数据。我该怎么做?
  • 您的示例显示了硬编码的年份(2009 年)。您是否获得了击中控制器的年份?此外,您的带有参数的操作链接看起来不正确。见here

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


【解决方案1】:

我愿意:

  • 将第二个容器移动到局部视图中
  • 创建一个只返回特定年份数据的新操作方法
  • 在相关按钮单击时使用 Ajax 加载到局部视图中。

您也许可以使用@ajax 助手

https://www.c-sharpcorner.com/UploadFile/abhikumarvatsa/ajax-actionlink-and-html-actionlink-in-mvc/

【讨论】:

  • 我将第二个容器移到局部视图中。但我不确定如何在行动方法中获取特定年份的数据
【解决方案2】:

我将第二个容器移到部分视图中,并将来自 for 循环的点击年份传递给控制器​​以过滤数据。 看法 : var year = DateTime.Now.Year; for (var i = year; i > 2009; i--)

{

                var j = @i - 1;
                <div class="col-md-1 ">
                    @Html.ActionLink(i.ToString(), "MyCases/" + i)
                </div>

            }

控制器:

public ActionResult MyCases(int i) {

 var cases = _db.case.Where(p => p.date.Value.Year == i)
              .OrderByDescending(p => p.date).ToList();

 return View(cases);

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-12
    • 2011-08-21
    • 2013-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-03
    相关资源
    最近更新 更多