Sample Umbraco Razor Macros
How To See What Umbraco Node Field Properties Are Available
How to see what field are available at @Model

Get A Node Via Razor
At lot of blood sweat and tears went into this Macro, may it help someone one day.
This gets details of a blog post or news item.

Get Media In C#
Getting media in C#
public class MediaFunctions
{
public static string GetURL(string mediaId)
{
string url = "";
if (!string.IsNullOrEmpty(mediaId))
{
int Id = Convert.ToInt32(mediaId);
var media = new umbraco.cms.businesslogic.media.Media(Id);
if (media != null)
{
var file = media.getProperty("umbracoFile");
url = (string)file.Value;
}
}
return url;
}
}
Getting a list of News items depending on which page of News we are viewing.
Getting media out of News
@{
var start_record = 0;
var theBlogImage = "";
}
@if(!string.IsNullOrEmpty(HttpContext.Current.Request.QueryString["starting_record"]))
{
start_record = Convert.ToInt32(HttpContext.Current.Request.QueryString["starting_record"]);
}
@foreach(var blogpost in @Model.Children.Where("NodeTypeAlias == \"BlogPost\"").OrderBy("dateCreated descending").Skip(start_record).Take(10))
{
@if(@blogpost.blogImage.ToString().Length > 0)
{
theBlogImage = @Model.MediaById(System.Convert.ToInt32(@blogpost.blogImage.ToString())).umbracoFile;
}
@Blog.FormatBlogPost(@blogpost.postBody.ToString(), @Convert.ToInt32(@Parameter.MaxWords), @blogpost.Id)
}
Connect to the database via an Umbraco Connection String
ActivaDataContext dataContext = new ActivaDataContext(umbraco.GlobalSettings.DbDSN);
Inline Macro To Get Form Fields and Submit To C#
@{
var id = Request.QueryString["id"].ToString();
var id_int = Convert.ToInt32(id);
var name = Request.Form["ctl00$ctl00$ContentPlaceHolderDefault$txtName"];
var email = Request.Form["ctl00$ctl00$ContentPlaceHolderDefault$txtEmail"];
var comment = Request.Form["ctl00$ctl00$ContentPlaceHolderDefault$txtComment"];
if(name != null)
{
@ActiviaExtensions.Comments.SaveComment(@id_int, @name, @email, @comment);
}
@ActiviaExtensions.Comments.DisplayComments(@id_int);
}
Access FAQs That Are A Child Of Content
This is done in a inline Macro:
@foreach(var faq in @Model.Children.Where("NodeTypeAlias == \"FrequentlyAskedQuestion\""))
{
@faq.question
@faq.answer
}
By the way, to get to the next content type
var next = @Model.Next(); var previous = @Model.Previous(); @umbraco.library.NiceUrl(@next.Id)
Save A Comment In C# dll
public static HtmlString SaveComment(int blogId, string name, string email, string comment)
{
ZoesBlogComment zcomment = new ZoesBlogComment();
zcomment.BlogPostId = blogId;
zcomment.Name = Microsoft.Security.Application.AntiXss.HtmlEncode(name);
zcomment.Email = Microsoft.Security.Application.AntiXss.HtmlEncode(email);
zcomment.Comment = Microsoft.Security.Application.AntiXss.HtmlEncode(comment);
zcomment.Approved = true;
zcomment.DateSubmitted = DateTime.Now;
ActivaDataContext dataContext = new ActivaDataContext(umbraco.GlobalSettings.DbDSN);
dataContext.ZoesBlogComments.InsertOnSubmit(zcomment);
dataContext.SubmitChanges();
//get the email address to send the comment to
umbraco.NodeFactory.Node miscellaneous = new umbraco.NodeFactory.Node(1161);
var emailAddress = miscellaneous.GetProperty("emailToSendBlogComments");
var serverEmail = miscellaneous.GetProperty("serverEmail");
//or umbraco.UmbracoSettings.NotificationEmailSender to get the from email address in umbracoSettings.config
string blogURL = umbraco.library.NiceUrl(blogId);
blogURL = "http://www.activia.com.au" + blogURL;
string line = "The following comment has been made to the post at " + blogURL + "";
line += "
Name: " + name;
line += "
Email: " + email;
line += "
Comment: " + comment;
umbraco.library.SendMail(serverEmail.ToString(), emailAddress.ToString(), "New comment for Zoe's Blog at www.activia.com.au" + blogURL.ToString(), line, true);
return new HtmlString("");
}