【问题标题】:View providing the same value to ControllerView 为 Controller 提供相同的值
【发布时间】:2019-11-16 13:32:34
【问题描述】:

我正在尝试编写一个简单的数字检查程序。您输入了正确的下一位数字 - 它会显示下一位,如果不是 - 没有任何反应。在控制器中,我试图:设置变量的值,递增它,传递给特定的视图(howManyDigits)。我知道我可以将 howManyDigits 设为会话变量,但这里的重点是了解为什么该数字仍会返回到 eg。 “2”,在应用程序第一次运行后在 View1 中输入。

Pi控制器:

namespace PI.Controllers
{
    public class PiController : Controller
    {
        [HttpGet]
        public ActionResult View1()
        {
            return View();
        }

        [HttpPost]
        public ActionResult View2(Pinumber number)
        {
            if (number.tabPi[number.howManyDigits] != number.numberEntered)
                number.howManyDigits++;

            return View(number);

        }

    }
}

视图1:

@model PI.Models.Pinumber

@using (Html.BeginForm("View2", "Pi", FormMethod.Post))
{
    @Html.TextBoxFor(number => number.howManyDigits,new { autofocus = "autofocus"})

    <input type="submit" value="How many numbers do you know?" />
} 

在这个视图中,我有 BeginForm,我正在尝试使用 HiddenFor 和 Lambda 表达式将此变量传递回同一个控制器。

视图2:

@model PI.Models.Pinumber

<div>
    3.@for (int i = 0; i < Model.howManyDigits; i++)
    {
        @Model.tabPi[i]
    }
</div>

@using (Html.BeginForm("View2", "Pi", FormMethod.Post))
{
    @Html.HiddenFor(x=> x.howManyDigits)
    @Html.TextBoxFor(x => x.numberEntered, new { autofocus = "autofocus" })

}

型号类Pinumber:

namespace PI.Models
{
    public class Pinumber
    {
        public char[] tabPi { get; set; } = new char[100000];
        public Pinumber()
        {
                for (int i = 0; i < 20; i++)
                {
                    tabPi[i] = piNumber[i];
                }
        }
        public int howManyDigits { get; set; }
        public char numberEntered { get; set; }

        public string piNumber = "141592653589793238462"

不幸的是,它会使用我在其他 View1 中输入的旧值返回到 Controller,该值仅用于显示带有您已经知道的输入位数的起始站点 - [HttpGet]。

【问题讨论】:

    标签: c# .net asp.net-mvc model-view-controller


    【解决方案1】:

    事情并非如此。

    看,如果你增加某个 int 变量的值,比如说从 1 到 2,然后你将它传递给视图。然后你想把它从 2 增加到 3,你需要把那个 2 从 View(来自 HTML 代码)发送回后端,并在那里增加它,否则,价值会丢失。

    【讨论】:

    • 谢谢,但@Html.HiddenFor(x=> x.howManyDigits) 是我尝试将其从 View2 传递回控制器的方式。此外,似乎价值并没有丢失,因为我得到了我所说的 - 数字“2”(这是我在开始时写的数字)。
    • 您可以在其中使用输入和值,并且只需将类隐藏,无需使用 HTML 帮助器,它们只会使事情复杂化 :)!
    • 我通过对 stackoverflow.com/questions/20657706/… 使用 ModelState.Clear() 解决了这个问题。这篇文章实际上包含你的解释,所以我会使用这个,因为它更好非常感谢你!
    猜你喜欢
    • 1970-01-01
    • 2012-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-31
    • 2014-03-17
    • 2015-05-01
    • 1970-01-01
    相关资源
    最近更新 更多