edit custom mvc widget template
Hello,
I'm in the process of creating a flickr MVC widget. I want to know if there is a possibility that backend users can edit the template (mvc view) in the administration part of sitefinity? I thought about using Design >> wiget template but I don't think this is used to edit "MVC" widgets only webforms. Any idea?
Thank you,
Kr,
Jordi
Hello Jordi,
The views of the MVC widgets, including the Feather ones, could be edited in any editor. There is no need to use Visual Studio.
In the the Design > Widget templates you have web forms templates and the Dynamic modules MVC templates also..
You can try to register the template in the backend like:
public
void
RegisterTemplate()
var area =
"MyController"
;
// The controller name
var condition =
"MyController MVC"
;
var controlType =
typeof
(MultilineTextController).FullName;
var listTemplateName =
"List.Test"
;
// The view template name
var friendlyControlList =
"MyController list (MVC)"
;
var nameForDevelopersList = listTemplateName.Replace(
'.'
,
'-'
);
var path = Server.MapPath(
"~/Mvc/Views/MyView/List.Default1.cshtml"
);
// physical file to be used to extract razor syntax markup
var content =
this
.GetViewContentFromFileSystem(path);
var listTemplate =
this
.RegistereTemplate(area, listTemplateName, nameForDevelopersList, friendlyControlList, content, condition, controlType);
// restart after creating the template
SystemManager.RestartApplication(OperationReason.UnknownReason(), SystemRestartFlags.Default);
private
string
GetViewContentFromFileSystem(
string
path)
var templateText =
string
.Empty;
bool
fileExists = System.IO.File.Exists(path);
if
(fileExists)
templateText = System.IO.File.ReadAllText(path, System.Text.Encoding.UTF8);
else
throw
new
FileNotFoundException(
"File not found! Path: "
+ path);
return
templateText;
private
ControlPresentation RegistereTemplate(
string
area,
string
name,
string
nameForDevelopers,
string
friendlyControlName,
string
content,
string
condition,
string
controlType)
var pageManager = PageManager.GetManager();
var template = pageManager.GetPresentationItems<ControlPresentation>()
.Where(cp => cp.NameForDevelopers == nameForDevelopers
&& cp.AreaName == area && cp.Condition == condition)
.FirstOrDefault();
if
(template ==
null
)
template = pageManager.CreatePresentationItem<ControlPresentation>();
template.AreaName = area;
template.Data = content;
template.Condition = condition;
template.ControlType = controlType;
template.Name = name;
template.NameForDevelopers = nameForDevelopers;
template.FriendlyControlName = friendlyControlName;
template.IsDifferentFromEmbedded =
true
;
template.DataType = Presentation.AspNetTemplate;
var versionManager = VersionManager.GetManager();
versionManager.CreateVersion(template,
true
);
pageManager.SaveChanges();
// Create a version of the template for Revision History
versionManager.SaveChanges();
return
template;
Sorry I think I have to rephrase. Ialready have custom mvc widget working (residing in a seperate assembly). Now I want to know if it is possible for backend users to modify the view? I don't think so maybe cause the view is an embedded resource? Or is there..
Thank you for your help
Kr,
Jordi
Hi Jordi,
As the view is embedded resource and in case you want to provide such functionality for the users to amend the view in the Backend you need to register it as described before.
Thus the view will be available for edit under Design > Widget templates.
Regards,
Svetoslav Manchev
Telerik