0

在我尝试解释我的问题时,请耐心等待我。

我将我的表单发布回控制器并更新模型并将其传递回视图。如果我使用提交按钮,这可以正常工作,但如果我使用非提交按钮并尝试使用 javascript 回发,则无法正常工作。

我试过寻找这个问题,但我不知道如何措辞,所以我可以得到任何接近它的结果。

基本上

  1. 正确 - 当我单击输入类型 =“提交”的 AddDetail 按钮时,我的控制器被调用,模型被更新并传递回视图,元素正确显示在页面上。

  2. 错误 - 当我单击输入类型 =“按钮”的 AddDetail1 按钮时,单击按钮时调用我的 javascript,调用控制器方法,将 FormCollection 和模型正确传递到控制器中。模型得到更新并传回视图,但页面上没有显示任何元素。

我已经将这段代码单步执行了 100 次,我看到的一切都与视图中设置的元素完全相同。唯一的区别是提交按钮将呈现控件,但其他按钮不会呈现任何内容。我在点击每个按钮后查看了 html 源代码,并且提交按钮显示了控件,但是当我单击其他按钮时没有控件。

我什至在页面上添加了一个@Model.cases.count - 最初它显示 0 是正确的,但在回发后它显示 1 用于提交按钮,当我单步执行另一个按钮的代码时,它显示 1 ,但是当页面最终完成并呈现所有内容时,它显示为 0,即使在我单步执行代码时它是 1。

非常令人沮丧

任何想法将不胜感激。

这是我的简化视图

@model CASA.ViewModels.CaseViewModel

<script type="text/javascript">
    $(function () {
        $("#AddDetail1").click(function () {
            var form = $(':input');
            //var action = form.attr("action");
            var serializedForm = form.serialize();
            var url = '@Url.Action("CreateCase")';
            //$.post(url, serializedForm);
            $.ajax({
                url: url,
                data: serializedForm,
                type: 'POST',
                success: function (response) {
                    alert(response);
                    // process the results from the controller action

                    //  window.location.href = response.Url;
                }

            });
        });
    });
@using (Html.BeginForm())
{
    @Html.ValidationSummary(true)

    @if (Model.cases != null && Model.cases.Count > 0)
        {
            for (int i = 0; i < Model.cases.Count; i++)
            {
                <tr>
                    <td>
                        @Html.TextBoxFor(m => m.cases[i].CaseNumber, new { @class = "textbox" })
                    </td>
                    <td>
                        @Html.TextBoxFor(m => m.cases[i].FirstName, new { @class = "nameTextbox" })
                    </td>
                    <td>
                        @Html.TextBoxFor(m => m.cases[i].LastName, new { @class = "nameTextbox" })
                    </td>
                    <td>
                        @Html.EditorFor(m => m.cases[i].DOB)
                    </td>
                    <td>
                        @Html.RadioButtonListFor(m => m.cases[i].Sex, Model.radiobuttons.RadioButtonListItems)
                    </td>
                </tr>
            }
        }

<input type="submit" value="+" id="AddDetail" class="button" />
<input type="button" value="+" id="AddDetail1" class="button" />
}

这是我的控制器:

[HttpPost]
        public ActionResult CreateCase(FormCollection collection, CaseViewModel model)
        {
            if (ModelState.IsValid)
            {
                model.cases.Add(new CASA_Cases
                {
                    CaseNumber = collection["CaseNumber"],
                    FirstName = collection["FirstName"],
                    LastName = collection["LastName"],
                    DOB = Convert.ToDateTime(collection["DOB"]),
                    Sex = collection["Sex"]
                });

                UpdateModel(model);
                if (submit.Count() > 0)
                {
                    model.cases.ForEach(item =>
                        {
                            if (model.group.ID == null)
                            {
                                model.group.ID = Guid.NewGuid();
                                model.group.UserID = Utilities.Utilities.GetUserID;
                            }

                            item.CASA_CaseGroups_ID = model.group.ID;
                        });
                }
            }
            return View(model);
        }
4

1 回答 1

0

再次感谢所有建议。

这就是解决我的问题的方法。

我在 PartialView 上方制作了视图并将 jQuery 更改为

<script type="text/javascript">
    $(function () {
        $("#AddDetail1").click(function () {
            var form = $(':input');
            var serializedForm = form.serialize();
            var url = '@Url.Action("CreatePartialView")';
            $.ajax({
                url: url,
                data: serializedForm,
                type: 'POST',
                success: function (response) {
                    $("#result").html(response);
                }
            });
        });
    });
</script>

接下来我创建了一个实际的视图来保存 PartView 如下

<div id="result">
@model CASA.ViewModels.CaseViewModel

@using (Ajax.BeginForm(new AjaxOptions { UpdateTargetId = "result" }))
{
        @Html.Partial("CasePartialView", Model)
}
</div>

最后,我修改了Controller以返回PartialView如下

[HttpPost]
        public PartialViewResult CreatePartialView(FormCollection collection, CaseViewModel model)
        {
            //Determine if submit button was clicked
            IEnumerable<string> submit = collection.AllKeys.Where(n => n.ToLower().Equals("submit"));

            model.cases.Add(new CASA_Cases
            {
                CaseNumber = collection["CaseNumber"],
                FirstName = collection["FirstName"],
                LastName = collection["LastName"],
                DOB = Convert.ToDateTime(collection["DOB"]),
                Sex = collection["Sex"]
            });


            return PartialView("CasePartialView",model);
        }

再次感谢所有的建议

于 2012-12-27T03:45:44.280 回答