这是一个奇怪的问题。 我在视图中从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实体然后跳转到db.SaveChanges() 然后返回到顶部AGAIN,通过方法和错误输出,因为参数已被该点清除。插入原始记录。
有什么想法吗?
答案 0 :(得分:1)
如果您使用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() }
});
});