2012-06-28 3 views
1

Вот и странная проблема. Я вызываю ActionResult в своем контроллере из jQuery на представлении.mvc3 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); 
     } 

Вот HTML, связанные с JQuery:

<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 действителен, он переходит в отмечает объект и присваивает значения и т. д. Когда точка останова попадает в db.CasesNotes.Add (примечания), точка останова возвращается в начало функции и снова опускается до тех пор, пока она не попадет в объект заметок, а затем перейдет к db.SaveChanges() , а затем вернется к верхнее AGAIN, проходит через метод и ошибки, потому что параметры были очищены этой точкой. Однако исходная запись вставлена.

Любые мысли?

+0

Я помню, что-то вроде этого. Я думаю, что это связано с этим именем «id» «int id» и маршрутизацией. Нужно попытаться вспомнить –

+0

@bart это одно странно – Ryan

+0

не могли бы вы добавить разметку html, связанную с javascript? – Jorge

ответ

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() } 
     }); 
}); 
+0

спасибо за это. Он отлично работал. Я действительно не вижу причин, по которым я должен использовать Html.ActionLink против кнопки htm в этом случае. Возможно, я изменю его, чтобы было легче. – Ryan