mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-10-15 19:54:57 +08:00
Fixed behavior of Element Controller in an around editing and updating.
Also removed unused file, unused methods, and unused parameters.
This commit is contained in:
@@ -12,7 +12,6 @@ using Orchard.Layouts.Services;
|
|||||||
using Orchard.Layouts.ViewModels;
|
using Orchard.Layouts.ViewModels;
|
||||||
using Orchard.Localization;
|
using Orchard.Localization;
|
||||||
using Orchard.UI.Admin;
|
using Orchard.UI.Admin;
|
||||||
using Orchard.Utility.Extensions;
|
|
||||||
|
|
||||||
namespace Orchard.Layouts.Controllers {
|
namespace Orchard.Layouts.Controllers {
|
||||||
[Admin]
|
[Admin]
|
||||||
@@ -21,7 +20,6 @@ namespace Orchard.Layouts.Controllers {
|
|||||||
private readonly IElementManager _elementManager;
|
private readonly IElementManager _elementManager;
|
||||||
private readonly IShapeFactory _shapeFactory;
|
private readonly IShapeFactory _shapeFactory;
|
||||||
private readonly ITransactionManager _transactionManager;
|
private readonly ITransactionManager _transactionManager;
|
||||||
private readonly ICultureAccessor _cultureAccessor;
|
|
||||||
private readonly IContentManager _contentManager;
|
private readonly IContentManager _contentManager;
|
||||||
private readonly IObjectStore _objectStore;
|
private readonly IObjectStore _objectStore;
|
||||||
private readonly IShapeDisplay _shapeDisplay;
|
private readonly IShapeDisplay _shapeDisplay;
|
||||||
@@ -32,7 +30,6 @@ namespace Orchard.Layouts.Controllers {
|
|||||||
IElementManager elementManager,
|
IElementManager elementManager,
|
||||||
IShapeFactory shapeFactory,
|
IShapeFactory shapeFactory,
|
||||||
ITransactionManager transactionManager,
|
ITransactionManager transactionManager,
|
||||||
ICultureAccessor cultureAccessor,
|
|
||||||
IContentManager contentManager,
|
IContentManager contentManager,
|
||||||
IObjectStore objectStore,
|
IObjectStore objectStore,
|
||||||
IShapeDisplay shapeDisplay,
|
IShapeDisplay shapeDisplay,
|
||||||
@@ -42,92 +39,12 @@ namespace Orchard.Layouts.Controllers {
|
|||||||
_elementManager = elementManager;
|
_elementManager = elementManager;
|
||||||
_shapeFactory = shapeFactory;
|
_shapeFactory = shapeFactory;
|
||||||
_transactionManager = transactionManager;
|
_transactionManager = transactionManager;
|
||||||
_cultureAccessor = cultureAccessor;
|
|
||||||
_contentManager = contentManager;
|
_contentManager = contentManager;
|
||||||
_objectStore = objectStore;
|
_objectStore = objectStore;
|
||||||
_shapeDisplay = shapeDisplay;
|
_shapeDisplay = shapeDisplay;
|
||||||
_mapper = mapper;
|
_mapper = mapper;
|
||||||
}
|
}
|
||||||
|
|
||||||
[HttpPost]
|
|
||||||
public JsonResult CreateDirect(string typeName, int? contentId = null, string contentType = null) {
|
|
||||||
var describeContext = CreateDescribeContext(contentId, contentType);
|
|
||||||
var descriptor = _elementManager.GetElementDescriptorByTypeName(describeContext, typeName);
|
|
||||||
var element = _elementManager.ActivateElement(descriptor);
|
|
||||||
|
|
||||||
var dto = new {
|
|
||||||
typeName = typeName,
|
|
||||||
typeLabel = descriptor.DisplayText.Text,
|
|
||||||
typeClass = descriptor.DisplayText.Text.HtmlClassify(),
|
|
||||||
data = element.Data.Serialize(),
|
|
||||||
html = RenderElement(element, describeContext)
|
|
||||||
};
|
|
||||||
|
|
||||||
return Json(dto);
|
|
||||||
}
|
|
||||||
|
|
||||||
public ViewResult Create(string id, string session, int? contentId = null, string contentType = null) {
|
|
||||||
var sessionState = new ElementSessionState {
|
|
||||||
TypeName = id,
|
|
||||||
ElementData = null,
|
|
||||||
ContentId = contentId,
|
|
||||||
ContentType = contentType
|
|
||||||
};
|
|
||||||
|
|
||||||
_objectStore.Set(session, sessionState);
|
|
||||||
|
|
||||||
var describeContext = CreateDescribeContext(contentId, contentType);
|
|
||||||
var descriptor = _elementManager.GetElementDescriptorByTypeName(describeContext, id);
|
|
||||||
var element = _elementManager.ActivateElement(descriptor);
|
|
||||||
var context = CreateEditorContext(session, describeContext.Content, element);
|
|
||||||
var editorResult = _elementManager.BuildEditor(context);
|
|
||||||
var viewModel = new EditElementViewModel {
|
|
||||||
SessionKey = session,
|
|
||||||
Layout = describeContext.Content.As<ILayoutAspect>(),
|
|
||||||
EditorResult = editorResult,
|
|
||||||
TypeName = id,
|
|
||||||
DisplayText = descriptor.DisplayText,
|
|
||||||
ElementData = element.Data.Serialize(),
|
|
||||||
Submitted = !descriptor.EnableEditorDialog,
|
|
||||||
ElementHtml = RenderElement(element, describeContext),
|
|
||||||
Tabs = editorResult.CollectTabs().ToArray()
|
|
||||||
};
|
|
||||||
|
|
||||||
return View(viewModel);
|
|
||||||
}
|
|
||||||
|
|
||||||
[HttpPost]
|
|
||||||
[ValidateInput(false)]
|
|
||||||
public ViewResult Create(ElementDataViewModel model, string session) {
|
|
||||||
var sessionState = _objectStore.Get<ElementSessionState>(session);
|
|
||||||
var contentId = sessionState.ContentId;
|
|
||||||
var contentType = sessionState.ContentType;
|
|
||||||
var describeContext = CreateDescribeContext(contentId, contentType);
|
|
||||||
var descriptor = _elementManager.GetElementDescriptorByTypeName(describeContext, model.TypeName);
|
|
||||||
var data = Request.Form.ToDictionary();
|
|
||||||
var element = _elementManager.ActivateElement(descriptor, e => e.Data = data);
|
|
||||||
var context = CreateEditorContext(session, describeContext.Content, element, postedElementData: data, updater: this);
|
|
||||||
var editorResult = _elementManager.UpdateEditor(context);
|
|
||||||
var viewModel = new EditElementViewModel {
|
|
||||||
SessionKey = session,
|
|
||||||
Layout = describeContext.Content.As<ILayoutAspect>(),
|
|
||||||
EditorResult = editorResult,
|
|
||||||
TypeName = model.TypeName,
|
|
||||||
DisplayText = descriptor.DisplayText,
|
|
||||||
ElementData = element.Data.Serialize(),
|
|
||||||
Tabs = editorResult.CollectTabs().ToArray(),
|
|
||||||
};
|
|
||||||
|
|
||||||
if (!ModelState.IsValid) {
|
|
||||||
_transactionManager.Cancel();
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
viewModel.Submitted = true;
|
|
||||||
viewModel.ElementEditorModel = _mapper.ToEditorModel(element, describeContext);
|
|
||||||
}
|
|
||||||
return View(viewModel);
|
|
||||||
}
|
|
||||||
|
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
[ValidateInput(false)]
|
[ValidateInput(false)]
|
||||||
public RedirectToRouteResult Edit(string session, string typeName, string elementData, string elementEditorData, int? contentId = null, string contentType = null) {
|
public RedirectToRouteResult Edit(string session, string typeName, string elementData, string elementEditorData, int? contentId = null, string contentType = null) {
|
||||||
@@ -140,7 +57,7 @@ namespace Orchard.Layouts.Controllers {
|
|||||||
};
|
};
|
||||||
|
|
||||||
_objectStore.Set(session, state);
|
_objectStore.Set(session, state);
|
||||||
return RedirectToAction("Edit", new {session = session});
|
return RedirectToAction("Edit", new {session});
|
||||||
}
|
}
|
||||||
|
|
||||||
public ViewResult Edit(string session) {
|
public ViewResult Edit(string session) {
|
||||||
@@ -153,7 +70,7 @@ namespace Orchard.Layouts.Controllers {
|
|||||||
var descriptor = _elementManager.GetElementDescriptorByTypeName(describeContext, typeName);
|
var descriptor = _elementManager.GetElementDescriptorByTypeName(describeContext, typeName);
|
||||||
var data = elementData.Combine(ElementDataHelper.Deserialize(sessionState.ElementEditorData));
|
var data = elementData.Combine(ElementDataHelper.Deserialize(sessionState.ElementEditorData));
|
||||||
var element = _elementManager.ActivateElement(descriptor, e => e.Data = data);
|
var element = _elementManager.ActivateElement(descriptor, e => e.Data = data);
|
||||||
var context = CreateEditorContext(session, describeContext.Content, element, postedElementData: data, elementData: elementData);
|
var context = CreateEditorContext(session, describeContext.Content, element, elementData);
|
||||||
var editorResult = _elementManager.BuildEditor(context);
|
var editorResult = _elementManager.BuildEditor(context);
|
||||||
|
|
||||||
var viewModel = new EditElementViewModel {
|
var viewModel = new EditElementViewModel {
|
||||||
@@ -172,21 +89,23 @@ namespace Orchard.Layouts.Controllers {
|
|||||||
|
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
[ValidateInput(false)]
|
[ValidateInput(false)]
|
||||||
public ViewResult Update(ElementDataViewModel model, string session) {
|
public ViewResult Update(string session) {
|
||||||
var sessionState = _objectStore.Get<ElementSessionState>(session);
|
var sessionState = _objectStore.Get<ElementSessionState>(session);
|
||||||
var contentId = sessionState.ContentId;
|
var contentId = sessionState.ContentId;
|
||||||
var contentType = sessionState.ContentType;
|
var contentType = sessionState.ContentType;
|
||||||
var describeContext = CreateDescribeContext(contentId, contentType);
|
var typeName = sessionState.TypeName;
|
||||||
var descriptor = _elementManager.GetElementDescriptorByTypeName(describeContext, model.TypeName);
|
|
||||||
var elementData = ElementDataHelper.Deserialize(sessionState.ElementData);
|
var elementData = ElementDataHelper.Deserialize(sessionState.ElementData);
|
||||||
var data = Request.Form.ToDictionary();
|
var describeContext = CreateDescribeContext(contentId, contentType);
|
||||||
|
var descriptor = _elementManager.GetElementDescriptorByTypeName(describeContext, typeName);
|
||||||
|
var data = elementData.Combine(ElementDataHelper.Deserialize(sessionState.ElementEditorData));
|
||||||
var element = _elementManager.ActivateElement(descriptor, e => e.Data = data);
|
var element = _elementManager.ActivateElement(descriptor, e => e.Data = data);
|
||||||
var context = CreateEditorContext(session, describeContext.Content, element, postedElementData: data, elementData: elementData, updater: this);
|
var context = CreateEditorContext(session, describeContext.Content, element, elementData, this);
|
||||||
var editorResult = _elementManager.UpdateEditor(context);
|
var editorResult = _elementManager.UpdateEditor(context);
|
||||||
|
|
||||||
var viewModel = new EditElementViewModel {
|
var viewModel = new EditElementViewModel {
|
||||||
Layout = describeContext.Content.As<ILayoutAspect>(),
|
Layout = describeContext.Content.As<ILayoutAspect>(),
|
||||||
EditorResult = editorResult,
|
EditorResult = editorResult,
|
||||||
TypeName = model.TypeName,
|
TypeName = typeName,
|
||||||
DisplayText = descriptor.DisplayText,
|
DisplayText = descriptor.DisplayText,
|
||||||
ElementData = element.Data.Serialize(),
|
ElementData = element.Data.Serialize(),
|
||||||
Tabs = editorResult.CollectTabs().ToArray(),
|
Tabs = editorResult.CollectTabs().ToArray(),
|
||||||
@@ -214,20 +133,17 @@ namespace Orchard.Layouts.Controllers {
|
|||||||
IContent content,
|
IContent content,
|
||||||
Element element,
|
Element element,
|
||||||
ElementDataDictionary elementData = null,
|
ElementDataDictionary elementData = null,
|
||||||
ElementDataDictionary postedElementData = null,
|
|
||||||
IUpdateModel updater = null) {
|
IUpdateModel updater = null) {
|
||||||
|
|
||||||
postedElementData = postedElementData ?? new ElementDataDictionary();
|
|
||||||
var context = new ElementEditorContext {
|
var context = new ElementEditorContext {
|
||||||
Session = session,
|
Session = session,
|
||||||
Content = content,
|
Content = content,
|
||||||
Element = element,
|
Element = element,
|
||||||
Updater = updater,
|
Updater = updater,
|
||||||
ElementData = elementData ?? new ElementDataDictionary(),
|
ElementData = elementData ?? new ElementDataDictionary(),
|
||||||
ValueProvider = postedElementData.ToValueProvider(_cultureAccessor.CurrentCulture),
|
ValueProvider = ValueProvider,
|
||||||
ShapeFactory = _shapeFactory
|
ShapeFactory = _shapeFactory
|
||||||
};
|
};
|
||||||
ValueProvider = context.ValueProvider;
|
|
||||||
return context;
|
return context;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -132,7 +132,6 @@
|
|||||||
<Content Include="Assets\JavaScript\Models\Row.js" />
|
<Content Include="Assets\JavaScript\Models\Row.js" />
|
||||||
<Content Include="Scripts\LayoutDecoder.js" />
|
<Content Include="Scripts\LayoutDecoder.js" />
|
||||||
<Content Include="Scripts\dialog.js" />
|
<Content Include="Scripts\dialog.js" />
|
||||||
<Content Include="Scripts\designer.canvas.js" />
|
|
||||||
<Content Include="Data\Canvas.json" />
|
<Content Include="Data\Canvas.json" />
|
||||||
<Content Include="Data\ContentTypes.json" />
|
<Content Include="Data\ContentTypes.json" />
|
||||||
<Content Include="Images\Web.config">
|
<Content Include="Images\Web.config">
|
||||||
|
@@ -12,12 +12,7 @@
|
|||||||
confirmDeletePrompt: self.element.data("confirm-delete-prompt"),
|
confirmDeletePrompt: self.element.data("confirm-delete-prompt"),
|
||||||
displayType: self.element.data("display-type"),
|
displayType: self.element.data("display-type"),
|
||||||
endpoints: {
|
endpoints: {
|
||||||
render: self.element.data("render-url"),
|
|
||||||
edit: self.element.data("edit-url"),
|
edit: self.element.data("edit-url"),
|
||||||
add: self.element.data("add-url"),
|
|
||||||
addDirect: self.element.data("add-direct-url"),
|
|
||||||
settings: self.element.data("settings-url"),
|
|
||||||
browse: self.element.data("element-browser-url"),
|
|
||||||
applyTemplate: self.element.data("apply-template-url")
|
applyTemplate: self.element.data("apply-template-url")
|
||||||
},
|
},
|
||||||
domOperations: {
|
domOperations: {
|
||||||
|
@@ -1,162 +0,0 @@
|
|||||||
(function ($) {
|
|
||||||
var LayoutDesigner = function (element) {
|
|
||||||
var self = this;
|
|
||||||
this.element = element;
|
|
||||||
this.canvas = element.find(".canvas");
|
|
||||||
this.toolbar = new window.Orchard.Layouts.CanvasToolbar(element.find(".canvas-toolbar"));
|
|
||||||
this.element.data("layout-designer", this);
|
|
||||||
this.settings = {
|
|
||||||
antiForgeryToken: self.element.data("anti-forgery-token"),
|
|
||||||
editorDialogTitleFormat: self.element.data("editor-dialog-title-format"),
|
|
||||||
editorDialogName: self.element.data("editor-dialog-name"),
|
|
||||||
confirmDeletePrompt: self.element.data("confirm-delete-prompt"),
|
|
||||||
displayType: self.element.data("display-type"),
|
|
||||||
endpoints: {
|
|
||||||
render: self.element.data("render-url"),
|
|
||||||
edit: self.element.data("edit-url"),
|
|
||||||
settings: self.element.data("settings-url"),
|
|
||||||
browse: self.element.data("element-browser-url"),
|
|
||||||
applyTemplate: self.element.data("apply-template-url")
|
|
||||||
},
|
|
||||||
domOperations: {
|
|
||||||
append: function (container, element) { container.append(element); },
|
|
||||||
replace: function (currentElement, newElement) { currentElement.replaceWith(newElement); }
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
this.browse = function (targetContainer) {
|
|
||||||
var href = self.settings.endpoints.browse;
|
|
||||||
var w = window.parent || window;
|
|
||||||
var dialog = new w.Orchard.Layouts.Dialog(".dialog-template." + self.settings.editorDialogName);
|
|
||||||
|
|
||||||
dialog.show();
|
|
||||||
dialog.load(href);
|
|
||||||
|
|
||||||
dialog.element.on("command", function (e, data) {
|
|
||||||
if (data.command == "add" || data.command == "save") {
|
|
||||||
var graph = {
|
|
||||||
elements: [
|
|
||||||
{
|
|
||||||
typeName: data.element.typeName,
|
|
||||||
data: data.element.data
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
self.renderGraph(targetContainer, graph, self.settings.domOperations.append);
|
|
||||||
self.element.find("a.add.start").removeClass("start").hide();
|
|
||||||
|
|
||||||
dialog.close();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
this.refreshElement = function (elementUI, elementData) {
|
|
||||||
// Serialize the element UI into an object graph.
|
|
||||||
var graph = {};
|
|
||||||
var data = elementData;
|
|
||||||
var stateFormValues = data ? $.deserialize(data) : null;
|
|
||||||
var formData = $.extend({}, stateFormValues);
|
|
||||||
window.Orchard.Layouts.Serializer.serialize(graph, elementUI);
|
|
||||||
|
|
||||||
if (data) {
|
|
||||||
// Update the element with the new Data.
|
|
||||||
graph.elements[0].state = data;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Special case for columns - we need to refresh the row, as changes to the column will have an effect to its silbings.
|
|
||||||
if (elementUI.is(".x-column")) {
|
|
||||||
// Serialize the parent UI into an object graph.
|
|
||||||
var containerUI = elementUI.parents(".x-container:first");
|
|
||||||
var containerGraph = {};
|
|
||||||
window.Orchard.Layouts.Serializer.serialize(containerGraph, containerUI);
|
|
||||||
containerGraph.elements[0].elements.splice(graph.elements[0].index, 1, graph.elements[0]);
|
|
||||||
|
|
||||||
// Render the graph.
|
|
||||||
this.renderGraph(containerUI, containerGraph, self.settings.domOperations.replace, formData);
|
|
||||||
} else {
|
|
||||||
// Render the graph.
|
|
||||||
this.renderGraph(elementUI, graph, self.settings.domOperations.replace, formData);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
this.serialize = window.Orchard.Layouts.Serializer.serialize;
|
|
||||||
|
|
||||||
this.applyTemplate = function (templateId) {
|
|
||||||
var graph = this.serialize({}, this.canvas);
|
|
||||||
|
|
||||||
$.ajax({
|
|
||||||
url: self.settings.endpoints.applyTemplate,
|
|
||||||
data: {
|
|
||||||
templateId: templateId,
|
|
||||||
layoutstate: JSON.stringify(graph),
|
|
||||||
__RequestVerificationToken: self.settings.antiForgeryToken
|
|
||||||
},
|
|
||||||
dataType: "html",
|
|
||||||
type: "post"
|
|
||||||
}).then(function (html) {
|
|
||||||
self.canvas.find(".x-root > .x-holder").html(html);
|
|
||||||
|
|
||||||
// Trigger event.
|
|
||||||
self.element.trigger("elementupdated", { elementUI: self.canvas });
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
this.toolbar.element.on("templateselected", function (e, data) {
|
|
||||||
var templateId = data.templateId;
|
|
||||||
self.applyTemplate(templateId);
|
|
||||||
});
|
|
||||||
|
|
||||||
var onEditElement = function (e) {
|
|
||||||
var sender = $(e.sender);
|
|
||||||
var elementUI = sender.closest(".x-element");
|
|
||||||
var elementData = elementUI.data("element");
|
|
||||||
var data = elementData.data;
|
|
||||||
var dialog = new window.Orchard.Layouts.Dialog(".dialog-template");
|
|
||||||
|
|
||||||
dialog.show();
|
|
||||||
dialog.load(self.settings.endpoints.edit, {
|
|
||||||
typeName: elementData.typeName,
|
|
||||||
elementData: data,
|
|
||||||
__RequestVerificationToken: self.settings.antiForgeryToken
|
|
||||||
}, "post");
|
|
||||||
|
|
||||||
dialog.element.on("command", function (e, args) {
|
|
||||||
if (args.command == "save") {
|
|
||||||
self.refreshElement(elementUI, args.element.data);
|
|
||||||
dialog.close();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
var onRemoveElement = function (e) {
|
|
||||||
var sender = $(e.sender);
|
|
||||||
var elementUI = sender.closest(".x-element");
|
|
||||||
|
|
||||||
if (confirm(self.settings.confirmDeletePrompt)) {
|
|
||||||
removeElement(elementUI);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
var initElementActions = function () {
|
|
||||||
self.canvas.on("click", "a.edit", function (e) {
|
|
||||||
e.preventDefault();
|
|
||||||
onEditElement({ sender: this });
|
|
||||||
});
|
|
||||||
self.canvas.on("click", "a.remove", function (e) {
|
|
||||||
e.preventDefault();
|
|
||||||
onRemoveElement({ sender: this });
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
var init = function () {
|
|
||||||
initElementActions();
|
|
||||||
};
|
|
||||||
|
|
||||||
init();
|
|
||||||
};
|
|
||||||
|
|
||||||
$(function () {
|
|
||||||
//window.layoutDesigner = new LayoutDesigner($(".layout-designer"));;
|
|
||||||
});
|
|
||||||
})(jQuery);
|
|
@@ -56,10 +56,8 @@
|
|||||||
<div class="layout-designer"
|
<div class="layout-designer"
|
||||||
data-modelstate-valid="@ViewData.ModelState.IsValid.ToString().ToLower()"
|
data-modelstate-valid="@ViewData.ModelState.IsValid.ToString().ToLower()"
|
||||||
data-display-type="Design"
|
data-display-type="Design"
|
||||||
data-edit-url="@Url.Action("Edit", "Element", new { session = Model.SessionKey, contentId = contentId, contentType = contentType, area = "Orchard.Layouts" })"
|
data-edit-url="@Url.Action("Edit", "Element", new { session = Model.SessionKey, contentId, contentType, area = "Orchard.Layouts" })"
|
||||||
data-add-url="@Url.Action("Add", "Element", new {session = Model.SessionKey, contentId = contentId, contentType = contentType, area = "Orchard.Layouts"})"
|
data-apply-template-url="@Url.Action("ApplyTemplate", "Layout", new { contentId, contentType, area = "Orchard.Layouts" })"
|
||||||
data-add-direct-url="@Url.Action("CreateDirect", "Element", new { contentId = contentId, contentType = contentType, area = "Orchard.Layouts" })"
|
|
||||||
data-apply-template-url="@Url.Action("ApplyTemplate", "Layout", new { contentId = contentId, contentType = contentType, area = "Orchard.Layouts" })"
|
|
||||||
data-confirm-delete-prompt="@T("Are you sure you want to delete this element?")"
|
data-confirm-delete-prompt="@T("Are you sure you want to delete this element?")"
|
||||||
data-editor-dialog-title-format="@T("$1 Properties")"
|
data-editor-dialog-title-format="@T("$1 Properties")"
|
||||||
data-editor-dialog-name="Layout"
|
data-editor-dialog-name="Layout"
|
||||||
|
@@ -15,8 +15,6 @@
|
|||||||
}
|
}
|
||||||
@Html.ValidationSummary()
|
@Html.ValidationSummary()
|
||||||
@using (Html.BeginFormAntiForgeryPost(Url.Action("Update", "Element", new { session = Model.SessionKey, area = "Orchard.Layouts" }))) {
|
@using (Html.BeginFormAntiForgeryPost(Url.Action("Update", "Element", new { session = Model.SessionKey, area = "Orchard.Layouts" }))) {
|
||||||
@Html.HiddenFor(m => m.TypeName)
|
|
||||||
@Html.HiddenFor(m => m.ElementData)
|
|
||||||
foreach (var tab in Model.Tabs) {
|
foreach (var tab in Model.Tabs) {
|
||||||
var id = String.Format("element-{0}", tab.ToLowerInvariant());
|
var id = String.Format("element-{0}", tab.ToLowerInvariant());
|
||||||
<div id="@id" class="tab-view">
|
<div id="@id" class="tab-view">
|
||||||
|
Reference in New Issue
Block a user