首页 > 解决方案 > Html.BeginForm 不返回正确的模型实例

问题描述

我很难弄清楚如何让 Html.BeginForm 返回模型的当前实例而不是新实例。

为了解释什么是错的,当我在 TextBoxFor() 中编写一些东西并单击 html.beginform() 中的提交按钮时,它正确地执行了 AddStatus() 并使用右键将其放置在 statusDict 中并显示在foreach 循环中视图的右侧。然后,当我单击右侧的“fortsæt”按钮时,它会更正将值加载到 TextBoxFor 中,因为我将其默认为 Model.MailTitel。现在我想更改 Model.Mailtitel 中的内容,当我单击提交时,我希望它将此模型的特定实例返回给控制器,但 MailTitel 具有新值,因为这将是模型的实例已经在statusDict,它应该只更新@status.Value.MailTitel。然而,由于 Html.

所以我的问题是:如何让 Html.BeginForm() 返回与控制器给视图相同的模型实例?

代码:

看法:

@using DS_Prototype.Models
<!--Left side - Info filling -->
<div class="split left">
    @using (Html.BeginForm("Submit", "Home", FormMethod.Post))
    {
        @Html.AntiForgeryToken() // helps mitigate against cross-site request forgery
        @Html.TextBoxFor(Model => Model.MailTitel, new { @Value = Model.MailTitel })
        <button type="submit" class="btn btn-block btn-login">Submit</button>
    }
</div>

<!--Right side - Status overview -->
<div class="split right">
    @foreach (KeyValuePair<string, DriftStatus> status in (Dictionary<string, DriftStatus>)Session["statusDict"])
    {
        <div class="card">
            <div class="card-body">
                @status.Value.MailTitel
                <div class="btn-group btn-group-justified">
                    @Html.ActionLink("Fortsæt", "ContinueStatus", "Home", new { status_id = status.Key }, new { @class = "btn btn-primary" })
                    @Html.ActionLink("Afslut", "EndStatus", "Home", new { @class = "btn btn-primary" })
                </div>
            </div>
        </div>
    }
</div>

控制器:

        public ActionResult Submit(DriftStatus driftstatus) {
            AddStatus(driftstatus);
            ModelState.Clear();
            return View("Index", new DriftStatus());
        }

        public ActionResult ContinueStatus(string status_id)
        {
            return View("Index",FindStatus(status_id));
        }

        private DriftStatus FindStatus(string key)
        {
            Dictionary<string, DriftStatus> statusDict = Check_statusDict();
            DriftStatus driftstatus = statusDict[key];
            if (driftstatus == null)
            {
                return new DriftStatus();
            }
            return statusDict[key];
        }

        private void AddStatus(DriftStatus driftstatus)
        {
            Dictionary<string, DriftStatus> statusDict = Check_statusDict();
            if (!statusDict.ContainsKey(driftstatus.Created))
            {
                driftstatus.Created = DateTime.Now.ToString();
                statusDict.Add(driftstatus.Created, driftstatus);
            }
        }

标签: c#asp.netasp.net-mvcmodel-view-controller

解决方案


推荐阅读