Попробуйте следующий код:
$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;
Более подробную информацию о наборе атрибутов можно найти в следующей статье .
Благодаря
Вот и ответ! Это небольшое отличие от метода Мартина Фрома , и, похоже, он работает. Если чего-то не хватает, пожалуйста, не могли бы люди внести какие-либо изменения в код в разделе комментариев. Спасибо.
От вашего контроллера назовите это так:
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();
}
Крейг,
Взгляните на это. Джеффри Палермо написал субконтроллер для ASP.NET MVC, который должен выполнять то, что вы хотите:
MvcContrib - теперь с поддержкой субконтроллера для ASP.NET MVC: http://jeffreypalermo.com/blog/mvccontrib-now-with-subcontroller-support/
Почему бы просто не иметь статические "частичные" 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);
});
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());
}
}
}
Я целую вечность пытался сделать то же самое. У меня есть быстрое решение, которое нужно будет расширить.
ПРИМЕЧАНИЕ: я уже вижу одну проблему .. Все файлы cookie и другие переменные потеряны: (
Что я сделал:
Создать новый 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 (Данные));
}
}
Открытый интерфейс класса данных
IJsonHtml
{
String HtmlContent {получить; устанавливать; }
}
открытый класс DefaultJsonHtml: IJsonHtml
{
общедоступная строка HtmlContent {получить; устанавливать; }
}
Расширения контроллера
общедоступный статический ActionResult JsonHtmlViewResult (этот контроллер контроллера, строка viewName, строка masterName, объектная модель, данные IJsonHtml)
{
если (модель! = ноль)
{
controller.ViewData.Model = модель;
}
вернуть новый JsonHtmlViewResult
{
Данные = данные,
ViewName = viewName,
MasterName = masterName,
ViewData = controller.ViewData,
TempData = controller.TempData
};
}
Я использую HTML Helper из этой статьи: Render partial view to string in ASP.NET MVC. Все работает отлично!
Это хорошее решение проблемы: http://craftycode.wordpress.com/2010/05/15/asp-net-mvc-render-partial-view-to-string/