【问题标题】:asp.net how to pass data from view to controller with an buttonasp.net 如何使用按钮将数据从视图传递到控制器
【发布时间】:2018-04-09 02:30:34
【问题描述】:

我正在制作一个应用程序,在该应用程序中,我可以使用箭头按钮每天切换并查看一种日程安排。在 asp.net mvc 中。 (要清楚,左箭头会向后移动一天) 我只是一个学生,在 mvc 和 razor 和 c# 方面不是很先进。

我正在尝试通过 viewbag 传递数据,但控制器没有读取更新的 var。

cshtml代码

@using (@Html.BeginForm("Index", "Day", FormMethod.Post))
{
@Html.AntiForgeryToken()

string CurrDay = ViewBag.CurrentDay.ToString();
@Html.Hidden("CurrentDay", CurrDay);

<div class="DayWrapper">

    <input type="submit" name="Butteun1" value="<" class="DayButtons" style="border-right-width: 2px;" onclick="getElementById('CurrentDay').innerHTML = '1'" />
    <a href="../HourMonth">
        <div class="AgendaDayButton">
            <p>  @ViewBag.CurrentDay.ToShortDateString() </p>
        </div>
    </a>
    <input type="submit" name="Butteun2" value=">" class="DayButtons" style="border-left-width: 2px;" onclick="getElementById('CurrentDay').innerHTML = '-1'" />
</div>

控制器代码

    [HttpGet]
    public ActionResult Index(string sortOrder, int? customerIdFilter, int? projectIdFilter, string monthFilter, bool? totalsPerDay, int? CurrentEmployeeID, bool? missingDays, string Currentday)
    {
        totalsPerDay = GetCurrentTotalsPerDay(totalsPerDay);
        missingDays = GetCurrentMissingDays(missingDays);



        SetDefaultViewbag(sortOrder, monthFilter, totalsPerDay, CurrentEmployeeID, missingDays);

        string CurryDay = ViewBag.CurrentDay.ToString();

        if (CurryDay == "1")
        {
            Day.AddDays(1);
            return View(Day);
        }
        else if (CurryDay == "-1")
        {
            Day.AddDays(-1);
            return View(Day);
        }

        return View(GetData(sortOrder, customerIdFilter, projectIdFilter, totalsPerDay, CurrentEmployeeID, missingDays));
    }

【问题讨论】:

  • 那么究竟是什么问题?
  • 所以想法是,您按下按钮,“当前日期”更改为“1”或“-1”(顺便说一句,我刚刚注意到两个按钮都将 var 更改为 1)并且显示的日期将可以更改,但是在 if else 语句'currentday'处设置断点时根本没有更改。

标签: asp.net razor asp.net-mvc-5


【解决方案1】:

我可以提供一个更简单的解决方案吗?我只是要解决您在按下按钮时动态更改日期的问题。这是我将如何处理这个问题(非异步,显然异步解决方案会更好,但为了简单起见)。

动态更改日期的基本视图:

@model DateTime

<h1>SCHEDULE for @Model</h1>
<div class="btn btn-primary">
    @Html.ActionLink("Previous Day", "Index", new { datePassed = Model.AddDays(-1) })
</div>
<div class="btn btn-primary">
    @Html.ActionLink("Next Day", "Index", new { datePassed = Model.AddDays(1) })
</div>

对应控制人:

public class HomeController : Controller
{
    public ActionResult Index(DateTime? datePassed = null)
    {
        if (datePassed == null) datePassed = DateTime.Today;
        return View(datePassed);
    }
}

每次单击这些按钮之一时,它都应将当前日期递增的新日期向前或向后传递给控制器​​上的操作,并带您返回带有新日期的索引页面。这样一来,您真的根本不需要为 Viewbag 操心。

【讨论】:

  • 这就是答案。但在我的情况下,由于我不能使用 2 个模型,我已经开始使用 cookie 来存储数据(如果有人想知道你如何给我发消息并告诉你)。还是谢谢!
猜你喜欢
  • 2020-02-05
  • 1970-01-01
  • 1970-01-01
  • 2010-09-29
  • 1970-01-01
  • 1970-01-01
  • 2013-12-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多