JQUERY ajax pasando el valor de MVC View al controlador

Lo que quiero es pasar el valor de txtComments desde View (usando jquery / ajax) a Controller.

El problema es que ajax / jquery no acepta tags de script como cadena. Es decir, cuando ingreso cualquier etiqueta script / html en txtComments, el ajax va a la función de error y no puede ir al controlador.

Aquí está el jQuery:

$('#btnSaveComments').click(function () { var comments = $('#txtComments').val(); var selectedId = $('#hdnSelectedId').val(); $.ajax({ url: '?id=' + selectedId + '&comments=' + escape(comments), type: "post", cache: false, success: function (savingStatus) { $("#hdnOrigComments").val($('#txtComments').val()); $('#lblCommentsNotification').text(savingStatus); }, error: function (xhr, ajaxOptions, thrownError) { $('#lblCommentsNotification').text("Error encountered while saving the comments."); } }); }); 

Aquí está el controlador:

  [HttpPost] public ActionResult SaveComments(int id, string comments){ var actions = new Actions(User.Identity.Name); var status = actions.SaveComments(id, comments); return Content(status); } 

También probé $('#txtComments').serialize() lugar de escape (comentarios) pero sigue siendo el mismo.

Intenta usar la opción de data de la función $.ajax . Más información aquí .

 $('#btnSaveComments').click(function () { var comments = $('#txtComments').val(); var selectedId = $('#hdnSelectedId').val(); $.ajax({ url: '<%: Url.Action("SaveComments")%>', data: { 'id' : selectedId, 'comments' : comments }, type: "post", cache: false, success: function (savingStatus) { $("#hdnOrigComments").val($('#txtComments').val()); $('#lblCommentsNotification').text(savingStatus); }, error: function (xhr, ajaxOptions, thrownError) { $('#lblCommentsNotification').text("Error encountered while saving the comments."); } }); }); 

Aquí hay una forma alternativa de hacer la misma llamada. Y su tipo debe estar siempre en MAYÚSCULAS, ej. tipo: “GET” / tipo: “POST”.

 $.ajax({ url:/ControllerName/ActionName, data: "id=" + Id + "&param2=" + param2, type: "GET", success: function(data){ // code here }, error: function(passParams){ // code here } }); 

Otra alternativa será usar los datos-ajax en un enlace.

 Click Me! 

Suponiendo que tengas un div con el contenido _de_concepto, esto llamará a la acción y reemplazará el contenido dentro de ese div con los datos devueltos de esa acción.

 

No es realmente una respuesta directa a su pregunta, pero es algo de la que debe tener conocimiento;).

 $('#btnSaveComments').click(function () { var comments = $('#txtComments').val(); var selectedId = $('#hdnSelectedId').val(); $.ajax({ url: '<%: Url.Action("SaveComments")%>', data: { 'id' : selectedId, 'comments' : comments }, type: "post", cache: false, success: function (savingStatu`enter code here`s) { $("#hdnOrigComments").val($('#txtComments').val()); $('#lblCommentsNotification').text(savingStatus); }, error: function (xhr, ajaxOptions, thrownError) { $('#lblCommentsNotification').text("Error encountered while saving the comments."); } }); }); 
 View Data ============== @model IEnumerable 

Search Results

@if (!Model.Any()) { No Bank(s) found } else { @foreach (var item in Model) { }
@Html.DisplayNameFor(model => model.Name) @Html.DisplayNameFor(model => model.Address) @Html.DisplayNameFor(model => model.Postcode)
@Html.DisplayFor(modelItem => item.Name) @Html.DisplayFor(modelItem => item.Address) @Html.DisplayFor(modelItem => item.Postcode)
}