C# 提交ajax后不需要表单默认值

C# 提交ajax后不需要表单默认值,c#,ajax,forms,razor,C#,Ajax,Forms,Razor,我有这个脚本,它打算做的是:在一个有联系人列表的视图中,每个人都有一个编辑链接,每当你点击其中一个链接时,它会在一个局部视图中显示一个编辑表单(父视图中只有一个div用于保存它),就在点击的联系人下方,为此,它对服务器执行一个get-ajax调用,并获取该联系人的信息。提交后,也可以通过ajax刷新列表 一切似乎都很正常,但如果我编辑了联系人,在刷新列表后,我会尝试再次打开同一联系人的表单,并且信息与编辑前相同。虽然我看到服务器的列表是正确的(列表中的显示也是正确的,但它只是表单中的错误) 问题

我有这个脚本,它打算做的是:在一个有联系人列表的视图中,每个人都有一个编辑链接,每当你点击其中一个链接时,它会在一个局部视图中显示一个编辑表单(父视图中只有一个div用于保存它),就在点击的联系人下方,为此,它对服务器执行一个get-ajax调用,并获取该联系人的信息。提交后,也可以通过ajax刷新列表

一切似乎都很正常,但如果我编辑了联系人,在刷新列表后,我会尝试再次打开同一联系人的表单,并且信息与编辑前相同。虽然我看到服务器的列表是正确的(列表中的显示也是正确的,但它只是表单中的错误)

问题是,在ChromeDeveloper工具中,我可以看到一些“默认值”设置为前面内容的表单。我直到现在才知道它们,我也不知道如何摆脱它们,因为据我所知,我正在给服务器打一个get电话,无论如何我已经尝试过了

document.getElementById(“editForm”).reset()

没有运气

谢谢

剧本

(function ($) {
    var editContainer = $(document.getElementById('editContainer'));

    $('#editContainer').on('submit', '#editForm', ajaxEditCall);

    $('a.edit').on("click", displayEditForm);

    function displayEditForm(e) {
        var clickedElement = $(this).parent(),

        url = editContainer.data('amp-edit-url');

        $.get(url, {
            id: parseInt(this.id, 10)
        }, function (result) {
            editContainer.html(result);
            $.validator.unobtrusive.parse(editContainer);
            // Display edit form just below the "item" clicked
            if (editContainer.is(":visible")) {
                editContainer.slideToggle(300, function () {
                    editContainer.appendTo(clickedElement);
                    editContainer.slideToggle(300);
                });
            } else {
                editContainer.appendTo(clickedElement);
                editContainer.slideToggle(300);
            }
        }, "html");
        e.preventDefault();
    }

    function ajaxEditCall(e) {
        e.preventDefault();
        //if ($('#editForm').valid()) {
        var list = $(document.getElementById('list'));

        $.ajax({
            url: this.action,
            type: this.method,
            data: $(this).serialize(),
            success: function (result) {
                if (result.passedValidation == true) {
                    $.get(result.action, function (partial) {
                        document.getElementById("editForm").reset();
                        list.html(partial);
                        $('a.edit').on("click", displayEditForm);
                        $('#editForm').slideUp(300);
                        setTimeout(function () {
                            list.effect("highlight", {}, 3000);
                        }, 1000);
                    });
                } else {
                    $(document).scrollTop(0);
                    editContainer.html(result);
                    $.validator.unobtrusive.parse('#editForm');
                }
            }
        });
        //} return false;
    }
}(jQuery));
本案的观点是相关的

@model ContactListViewModel

@{
    ViewBag.Title = " My Contacts";
}

<div id="myContacts">
    <h2>My Contacts</h2>

    <div id="editContainer" data-amp-edit-url="@Url.Action("Edit", "Contacts")" class="initiallyHidden"></div>

    <div id="list">
        @{ Html.RenderPartial("_ContactList", Model); }
    </div>
    <div id="dialog" data-amp-del-url="@Url.Action("Delete", "Contacts")" title="Confirmation Required">
        <p>Are you sure you want to delete this Contact?</p>
    </div>
</div>

@section Foot
{
    <script src="~/Scripts/AMPContacts.js"></script>
    <script src="~/Scripts/conditional-validation.js"></script>
    <script src="~/Scripts/Placeholders.min.js"></script>
}
@model联系人列表视图模型
@{
ViewBag.Title=“我的联系人”;
}
我的联系人
@{Html.RenderPartial(“_ContactList”,Model);}
是否确实要删除此联系人

@节脚 { }
很明显,这是父视图,部分视图只是一堆字段,我删除了大部分字段,以避免增加已经很长的帖子

@model AddContactViewModel

@using (Html.BeginForm("Edit", "Contacts", FormMethod.Post, new { @id = "editForm", @class = "addTab" }))
{
    @Html.ValidationSummary(true, "Please correct the errors and try again.")

    @Html.HiddenFor(m => m.Id)
    @Html.HiddenFor(m => m.OwnedItemId)
    @Html.HiddenFor(m => m.AddressId)

    <div id="editContactDetails">
            <div>
                @Html.DisplayFor(m => m.PlanName)
            </div>

            <div>
                @Html.DropDownListFor(m => m.Title, Model.TitleList, "Title")
            </div>
            <div>
                @Html.EditorFor(m => m.FirstName, new { @id="editFirstName", data_placeholders_focus = "false", placeholder = ViewData.ModelMetadata.Watermark })
                @Html.ValidationMessageFor(m => m.FirstName)
            </div>

        // And so on....

        <div class="addDEC">
            <input class="addDECButton" type="submit" value="Save" />
        </div>
}
@model AddContactViewModel
@使用(Html.BeginForm(“Edit”、“Contacts”、FormMethod.Post、new{@id=“editForm”、@class=“addTab”}))
{
@ValidationSummary(true,“请更正错误并重试”)
@Html.HiddenFor(m=>m.Id)
@Html.HiddenFor(m=>m.OwnedItemId)
@Html.HiddenFor(m=>m.AddressId)
@DisplayFor(m=>m.PlanName)
@Html.DropDownListFor(m=>m.Title,Model.TitleList,“Title”)
@EditorFor(m=>m.FirstName,新的{@id=“editFirstName”,数据\u占位符\u focus=“false”,占位符=ViewData.ModelMetadata.Watermark})
@Html.ValidationMessageFor(m=>m.FirstName)
//等等。。。。
}

我在一个网站上遇到了这个问题。您需要禁用ajax缓存:

//Disbable cache for all jQuery AJAX requests
$.ajaxSetup({ cache: false });

这将适用于所有ajax调用,因此您可能只希望在某些页面上执行此操作,具体取决于您的使用情况。

我在一个网站上遇到了这个问题。您需要禁用ajax缓存:

//Disbable cache for all jQuery AJAX requests
$.ajaxSetup({ cache: false });

这将适用于所有ajax调用,因此您可能只希望在某些页面上执行此操作,具体取决于您的使用情况。

谢谢@Mike,但我仍然有同样的问题。根据您的回答,我尝试将get速记改为.ajax,并执行中提到的操作,但同一个(un)luckI刚刚注意到,在昨天漫长的一天之后,我发现我的解决方案缓存出了问题,问题就出在那里。这就是为什么我不能将你的答案标记为正确答案的原因,因为它不是针对我的问题(我每次都会将详细信息发送到服务器,因此不会缓存),但这完全是我的错,因为你的答案很有意义,并且帮助了我,这就是为什么我投票支持它。非常感谢Hanks@Mike,但我还是有同样的问题。根据您的回答,我尝试将get速记改为.ajax,并执行中提到的操作,但同一个(un)luckI刚刚注意到,在昨天漫长的一天之后,我发现我的解决方案缓存出了问题,问题就出在那里。这就是为什么我不能将你的答案标记为正确答案的原因,因为它不是针对我的问题(我每次都会将详细信息发送到服务器,因此不会缓存),但这完全是我的错,因为你的答案很有意义,并且帮助了我,这就是为什么我投票支持它。谢谢