MVC3 操作结果代码重复自身



这是一个奇怪的问题。我在控制器中从视图上的jQuery调用ActionResult。

这是 jQuery

$(document).ready(function () {
    $('.addNoteLink').button();
    $('.addNoteLink').click(function () {
        var cid = $('#CaseID').val();
        var notetext = $('#NoteText').val();
        var url = "/Cases/AddNoteText";
        $.ajax({
        type: "POST",
        url: url,
        data: { id: cid, note: $('#NoteText').val() }
            });
    });
});

下面是控制器方法:

public ActionResult AddNoteText(int id, string note)
        {
        try
            {
            if (ModelState.IsValid)
                {
                CaseNotes notes = new CaseNotes
                {
                    CasesID = id,
                    NoteDate = DateTime.Now,
                    NoteText = note
                };
                db.CaseNotes.Add(notes);
                db.SaveChanges();
                }
            }
        catch 
            {
            }
        return RedirectToAction("Edit", id);
        }

以下是与jQuery相关的html:

<div class="editor-label">
                    @Html.Label("Enter notes here and click Add Note Text")
                </div>
                <div class="textarea-field">
                    <input id = "NoteText" type="text" />
                </div>        
                @Html.ActionLink("Add Note Text", "AddNoteText", new { id = Model.CasesID }, new { @class = "addNoteLink" })

当 jQuery 调用此方法时,如果我跟着断点,参数会正确传递,ModelState 有效,它会进入 notes 实体并分配值等。当断点命中 db 时。CasesNotes.Add(notes) 断点返回到函数的顶部并再次下降,直到它命中 notes 实体,然后跳转到 db。保存更改()然后再次返回顶部,通过方法并错误,因为此时参数已被清除。不过,原始记录将入。

有什么想法吗?

如果您使用 jQuery 订阅锚点,单击浏览器仍会在您单击链接时执行默认操作(例如点击链接)。这就是为什么你的行动叫了两次。

您需要调用以在事件对象上调用 preventDefault() 以取消浏览器默认行为:

$('.addNoteLink').click(function (event) {
    event.preventDefault();
    var cid = $('#CaseID').val();
    var notetext = $('#NoteText').val();
    var url = "/Cases/AddNoteText";
    $.ajax({
    type: "POST",
    url: url,
    data: { id: cid, note: $('#NoteText').val() }
        });
});

最新更新