【问题标题】:MVC FormCollection not showing previous submitted itemsMVC FormCollection 不显示以前提交的项目
【发布时间】:2021-08-11 15:57:03
【问题描述】:

我正在使用 FormCollection 和 GetValues(),如果我重新提交信息,我会遇到问题。我有一个按钮,计算一系列条目的斜率。当我计算斜率时,我将信息保存在临时表中并在列表中重新显示值。当我第一次保存条目时,保存和构建列表没有问题。但是,当我再次尝试计算坡度时,它不会识别之前的条目或对之前条目的任何更改,但会识别任何新项目。

如果临时表中有任何值,我的创建控制器会显示列表

                model.TempPointList = db.Temp_SO2AuditMultipointCal
                .Where(x => x.SO2AuditCalID == tempID)
                .OrderByDescending(x => x.CalPoint).ToList();

HttpPost 会查看 FormCollection

                if (Command == "CalcSlope")
            {
                string[] pointItems1 = form.GetValues("Point");
                string[] concItems1 = form.GetValues("CalConc");
                string[] dasItems1 = form.GetValues("DAS");
                string[] diffItems1 = form.GetValues("Diff");
               //use arrays to calculate the slope ...
            }

我的视图收集并显示值

        <table class="table">
        <tbody id="myTable">
            <tr>
                <th>Select</th>
                <th>Point</th>
                 <th>Cal Conc</th>
                <th>DAS</th>
            </tr>
                foreach (var item in Model.TempPointList)
                {
                    <tr>
                        @Html.HiddenFor(modelItem => item.Temp_SO2AuditMultipointCalID)
                        <td><input type='checkbox' name='record'></td>
                        <td>@Html.EditorFor(modelItem => item.CalPoint, new { @autocomplete = false })</td>
                        <td>@Html.EditorFor(modelItem => item.CalConc, new { @autocomplete = false, @Cache = false })</td>
                        <td>@Html.EditorFor(modelItem => item.DASResponse, new { @autocomplete = false, @Cache = false })</td>
                    </tr>
                }
            }

当我将一个项目添加到列表中时,我有一个执行以下功能的 添加行 按钮

$(".add-row").click(function () {
            var Point = $("#Point").val();
            var CalConc = $("#CalConc").val();
            var DAS = $("#DAS").val();
            
                var count = $('#myTable').children('tr').length;
                $('#counter').html(count);

                $('#myTable').append("<tr><td><input type='checkbox' name='record'></td><td><input type='text' name='Point' value= " + Point + "></td><td><input type='text' name='CalConc' value= " + CalConc + "></td><td><input type='text' name='DAS' value= " + DAS + "></td></tr>");
        });

我尝试设置@Cache = false 并将ModelState.Clear(); 添加到控制器,但它们不会影响任何东西。

【问题讨论】:

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


    【解决方案1】:

    我通过删除列表和显示列表解决了这个问题。我添加了一个 window.onload 函数。

            window.onload = function () {
            if ($('#Temp').val() == "yes") {
                $.ajax({
                    type: "POST",
                    url: "/CertsHelper/SOAudit",
                    data: { id: $('#SO2AuditCalID').val() },
                    dataType: "json",
                    success: function (index) {
                        var count = $('#myTable').children('tr').length;
                        $('#counter').html(count);
                        $('#myTable').append(index);
                    },
                    error: function (error) {
                        alert("Display Temp Points not working: " + error);
                    }
                });
            }
        }
    

    该函数执行一个 ResultAction,为表格追加提供一个字符串结果。

        public JsonResult SOAudit(int id)
        {
            var tempPoints = db.Temp_SO2AuditMultipointCal
                .Where(x => x.SO2AuditCalID == id);
            string Color = "";
            StringBuilder sb = new StringBuilder();
            foreach (var x in tempPoints)
            {
                sb.Append("<tr><td><input type='checkbox' name='record'></td><td><input type='text' name='Point' value= " + x.CalPoint + "></td><td><input type='text' name='CalConc' value= " + x.CalConc + "></td><td><input type='text' name='DAS' value= " + x.DASResponse + "></td></tr>");
    
                //delete the recorded temp point
                Temp_SO2AuditMultipointCal _Points = db.Temp_SO2AuditMultipointCal.Find(x.Temp_SO2AuditMultipointCalID);
                db.Entry(_Points).State = EntityState.Deleted;
                db.SaveChanges();
            }
            string points = sb.ToString();
            return Json(points);
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-05
      • 2011-01-23
      • 2020-01-22
      相关资源
      最近更新 更多