Цель JSON () - вернуть объект JSON, а не HTML. Объект JSON будет выглядеть примерно так: {html_value: "
blah"}. Я не уверен, что ожидает ваш запрос ajax. Если он ожидает JSON (у вас дважды установлен dataType), вы можете сделать что-то вроде анонимного объекта:
return Json(new {html_value = retVal});
Однако, если вы хотите вернуть HTML с вашего контроллера - не . Это точно для чего предназначен вид. Создайте представление без какой-либо главной страницы, выполните цикл и верните HTML-код таким образом. Ajax-приложения могут использовать этот HTML-код и удалять его там, где это необходимо.
На самом деле, хотя технически вы могли бы выполнять вышеуказанный анонимный объект (где вы возвращаете html внутри объекта json), это не то, для чего он нужен. Если вы хотите использовать JSON, вы должны возвращать значения и разрешать JavaScript в клиентском формате отформатировать его:
Я не уверен, насколько "тяжел" ваш объект проблем, но предположим, что он имеет только три поля, которые вы используете. В этом случае выполните:
return Json(issues);
EDIT
Ну, я думаю, что "Best Practice" будет возвращать только значения через JSON и форматировать в javascript. Я недостаточно знаком с JSON (), но знаю, что он работает (я использую его для чего-то простого). Попробуйте создать простой объект вопросов только с этими тремя значениями и
return Json(issuesTxfr);
Вам не нужно использовать частичные просмотры, когда вы звоните с контроллера. Просто подумайте об этом, как об очень простом представлении. Вот мой пример (пожалуйста, не обращайте внимания на то, что я не следую своему собственному совету JSON - это уже давно, и теперь я несколько недоверчиво смотрю на него по нескольким причинам):
public ActionResult Controls_Search_Ajax(string q, string el)
{
...
ViewData["controls"] = controls;
ViewData["el"] = el;
return View();
}
и
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Controls_Search_Ajax.aspx.cs" Inherits="IRSoxCompliance.Views.Edit.Controls_Search_Ajax" %>
<% var controls = ViewData.Get<IEnumerable<IRSoxCompliance.Models.Control>>("controls");
var el = ViewData.Get<String>("el");
if (controls != null)
{
foreach (var c in controls)
{
%><%= c.Control_ID %>***<%= c.Full_Control_Name %>***<li id="<%= el %>:li:<%= c.Control_ID %>"><span class="item"><%= Html.BreadCrumb(c, false) %></span><span class="actions"><a href="#" onclick="sx_Remove_Control('<%= el %>', <%= c.Control_ID %>); return false;">Remove</a></span><br></li>
<% }
}
%>
Обратите внимание, что не указана главная страница.