ここに奇妙な問題があります。ビューの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.SaveChanges()にジャンプしてから、再び先頭に戻り、メソッドを通過して、その時点までにパラメーターがクリアされているため、エラーが発生します。ただし、元のレコードは挿入されます。
何かご意見は?