ASP контент представления MVC как JSON

Попробуйте следующий код:

$entityTypeId = Mage::getModel('eav/entity')
                ->setType('catalog_product')
                ->getTypeId();
$attributeSetName   = 'Default';
$attributeSetId     = Mage::getModel('eav/entity_attribute_set')
                    ->getCollection()
                    ->setEntityTypeFilter($entityTypeId)
                    ->addFieldToFilter('attribute_set_name', $attributeSetName)
                    ->getFirstItem()
                    ->getAttributeSetId();
echo $attributeSetId;

Более подробную информацию о наборе атрибутов можно найти в следующей статье .

Благодаря

17
задан Craig 28 April 2010 в 23:14
поделиться

7 ответов

Вот и ответ! Это небольшое отличие от метода Мартина Фрома , и, похоже, он работает. Если чего-то не хватает, пожалуйста, не могли бы люди внести какие-либо изменения в код в разделе комментариев. Спасибо.

От вашего контроллера назовите это так:

string HTMLOutput = Utils.RenderPartialToString("~/Views/Setting/IndexMain.ascx", "", items, this.ControllerContext.RequestContext);

Добавьте это в класс

public static string RenderPartialToString(string controlName, object viewData, object model, System.Web.Routing.RequestContext viewContext)
{
     ViewDataDictionary vd = new ViewDataDictionary(viewData);
     ViewPage vp = new ViewPage { ViewData = vd };

     vp.ViewData = vd;
     vp.ViewData.Model = model;
     vp.ViewContext = new ViewContext();
     vp.Url = new UrlHelper(viewContext);

     Control control = vp.LoadControl(controlName);

     vp.Controls.Add(control);

     StringBuilder sb = new StringBuilder();

     using (StringWriter sw = new StringWriter(sb))
     using (HtmlTextWriter tw = new HtmlTextWriter(sw))
     {
         vp.RenderControl(tw);
     }

     return sb.ToString();
}
11
ответ дан 30 November 2019 в 13:46
поделиться

Крейг,

Взгляните на это. Джеффри Палермо написал субконтроллер для ASP.NET MVC, который должен выполнять то, что вы хотите:

MvcContrib - теперь с поддержкой субконтроллера для ASP.NET MVC: http://jeffreypalermo.com/blog/mvccontrib-now-with-subcontroller-support/

0
ответ дан 30 November 2019 в 13:46
поделиться

Почему бы просто не иметь статические "частичные" HTML-файлы и получать все динамическое содержимое из json? Вы должны иметь возможность загружать html-файлы с помощью jquery, когда страница загружается или когда это необходимо, довольно легко.

Эта ссылка на JQuery Ajax дает следующий пример:

//Alert out the results from requesting test.php (HTML or XML, depending on what was returned).
$.get("test.php", function(data){
  alert("Data Loaded: " + data);
});
0
ответ дан 30 November 2019 в 13:46
поделиться

NerdDinner содержит несколько хороших примеров этого. Вот SearchController в NerdDinner, у которого есть метод SearchByLocation, который возвращает список JsonDinners. ( исходный код для NerdDinner принадлежит Creative Commons):

namespace NerdDinner.Controllers {

    public class JsonDinner {
        public int      DinnerID    { get; set; }
        public string   Title       { get; set; }
        public double   Latitude    { get; set; }
        public double   Longitude   { get; set; }
        public string   Description { get; set; }
        public int      RSVPCount   { get; set; }
    }

    public class SearchController : Controller {

        IDinnerRepository dinnerRepository;

        //
        // Dependency Injection enabled constructors

        public SearchController()
            : this(new DinnerRepository()) {
        }

        public SearchController(IDinnerRepository repository) {
            dinnerRepository = repository;
        }

        //
        // AJAX: /Search/FindByLocation?longitude=45&latitude=-90

        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult SearchByLocation(float latitude, float longitude) {

            var dinners = dinnerRepository.FindByLocation(latitude, longitude);

            var jsonDinners = from dinner in dinners
                              select new JsonDinner {
                                  DinnerID = dinner.DinnerID,
                                  Latitude = dinner.Latitude,
                                  Longitude = dinner.Longitude,
                                  Title = dinner.Title,
                                  Description = dinner.Description,
                                  RSVPCount = dinner.RSVPs.Count
                              };

            return Json(jsonDinners.ToList());
        }
    }
}
4
ответ дан 30 November 2019 в 13:46
поделиться

Я целую вечность пытался сделать то же самое. У меня есть быстрое решение, которое нужно будет расширить.

ПРИМЕЧАНИЕ: я уже вижу одну проблему .. Все файлы cookie и другие переменные потеряны: (

Что я сделал:

  1. Создать новый ActionResult

     открытый класс JsonHtmlViewResult: ViewResult
    {
    общедоступные данные IJsonHtml {get; устанавливать; }
    
     public override void ExecuteResult (контекст ControllerContext)
     {
     если (Данные == нуль)
     {
     Данные = новый DefaultJsonHtml ();
     }
    
     используя (StringWriter sw = new StringWriter ())
     {
     Запрос HttpRequest = HttpContext.Current.Request;
     HttpContext.Current = новый HttpContext (запрос, новый HttpResponse (sw));
    
     base.ExecuteResult (контекст);
    
     Data.HtmlContent = sw.ToString ();
     }
    
     // Выполняем сериализацию.
     HttpResponseBase response = context.HttpContext.Response;
     response.ClearContent ();
     response.ContentType = "приложение / json";
    
     JavaScriptSerializer serializer = новый JavaScriptSerializer ();
     response.Write (сериализатор.Serialize (Данные));
     }
    }
    
  2. Открытый интерфейс класса данных

     IJsonHtml
    {
    String HtmlContent {получить; устанавливать; }
    }
    
    открытый класс DefaultJsonHtml: IJsonHtml
    {
    общедоступная строка HtmlContent {получить; устанавливать; }
    }
    
  3. Расширения контроллера

     общедоступный статический ActionResult JsonHtmlViewResult (этот контроллер контроллера, строка viewName, строка masterName, объектная модель, данные IJsonHtml)
    {
     если (модель! = ноль)
     {
     controller.ViewData.Model = модель;
     }
    
     вернуть новый JsonHtmlViewResult
     {
     Данные = данные,
     ViewName = viewName,
     MasterName = masterName,
     ViewData = controller.ViewData,
     TempData = controller.TempData
     };
    }
    
1
ответ дан 30 November 2019 в 13:46
поделиться

Я использую HTML Helper из этой статьи: Render partial view to string in ASP.NET MVC. Все работает отлично!

1
ответ дан 30 November 2019 в 13:46
поделиться
2
ответ дан 30 November 2019 в 13:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: