本文整理汇总了C#中IPropertyBag.TryGet方法的典型用法代码示例。如果您正苦于以下问题:C# IPropertyBag.TryGet方法的具体用法?C# IPropertyBag.TryGet怎么用?C# IPropertyBag.TryGet使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类IPropertyBag
的用法示例。
在下文中一共展示了IPropertyBag.TryGet方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: DoToUpdateStatement
/// <summary>
///
/// </summary>
/// <param name="context"></param>
/// <param name="queryBuilder"></param>
/// <param name="record"> </param>
/// <param name="modifiedProperties"></param>
protected override void DoToUpdateStatement(IMansionContext context, ModificationQueryBuilder queryBuilder, Record record, IPropertyBag modifiedProperties)
{
// check if the property is not modified
int newOrder;
if (!modifiedProperties.TryGet(context, PropertyName, out newOrder))
return;
// check if the record contains a pointer
NodePointer pointer;
if (!record.TryGet(context, "pointer", out pointer))
throw new InvalidOperationException("Could not update this record because it did not contain a pointer");
// don't update order for root nodes
if (pointer.Depth == 1)
return;
// do not allow values smaller than 1
if (newOrder < 1)
throw new InvalidOperationException("Can not set orders smaller than 1");
// assemble parameter
var newOrderParameterName = queryBuilder.AddParameter("newOrder", newOrder, DbType.Int32);
var oldOrderParameterName = queryBuilder.AddParameter("oldOrder", record.Get<int>(context, PropertyName), DbType.Int32);
var parentIdParameterName = queryBuilder.AddParameter("parentId", pointer.Parent.Id, DbType.Int32);
// update the orders before updating the order of the current node
queryBuilder.PrependQuery(string.Format("UPDATE [Nodes] SET [order] = [order] + 1 WHERE (parentId = {0}) AND ([order] < {1} AND [order] >= {2})", parentIdParameterName, oldOrderParameterName, newOrderParameterName));
queryBuilder.PrependQuery(string.Format("UPDATE [Nodes] SET [order] = [order] - 1 WHERE (parentId = {0}) AND ([order] > {1} AND [order] <= {2})", parentIdParameterName, oldOrderParameterName, newOrderParameterName));
// update the column
queryBuilder.AddColumnValue(PropertyName, newOrderParameterName);
}
示例2: ReviveUser
/// <summary>
/// Tries to revive the user based on the revival properties.
/// </summary>
/// <param name="context">The security context.</param>
/// <param name="revivalProperties">The revival properties.</param>
/// <returns>Returns the revived <see cref="UserState"/> or null.</returns>
public override UserState ReviveUser(IMansionContext context, IPropertyBag revivalProperties)
{
// validate arguments
if (context == null)
throw new ArgumentNullException("context");
if (revivalProperties == null)
throw new ArgumentNullException("revivalProperties");
// get the id of the from the revival properties
Guid id;
if (!revivalProperties.TryGet(context, "id", out id))
return null;
// retrieve the user by guid
var userNode = context.Repository.RetrieveSingleNode(context, new PropertyBag {
{"baseType", "User"},
{"guid", id},
{"status", "any"},
{"bypassAuthorization", true},
{"cache", false},
{StorageOnlyQueryComponent.PropertyKey, true}
});
if (userNode == null)
return null;
// create and return the user state
return CreateUserState(context, userNode);
}
示例3: Populate
/// <summary>
/// Populates the fullText property.
/// </summary>
/// <param name="context">The <see cref="IMansionContext"/>.</param>
/// <param name="modifiedProperties">The modified <see cref="IPropertyBag"/>.</param>
/// <param name="originalProperties">The original <see cref="IPropertyBag"/>.</param>
/// <exception cref="ArgumentNullException">Thrown if one of the parameters is null.</exception>
public void Populate(IMansionContext context, IPropertyBag modifiedProperties, IPropertyBag originalProperties)
{
//validate arguments
if (context == null)
throw new ArgumentNullException("context");
if (modifiedProperties == null)
throw new ArgumentNullException("modifiedProperties");
if (originalProperties == null)
throw new ArgumentNullException("originalProperties");
// get all the properties over which to loop
var properties = Properties.Get<string>(context, "properties").Split(new[] {','}, StringSplitOptions.RemoveEmptyEntries).Select(property => property.Trim());
// assemble the content
var buffer = new StringBuilder();
foreach (var property in properties)
{
// get the content for the given property
String content;
if (!modifiedProperties.TryGet(context, property, out content))
{
if (!originalProperties.TryGet(context, property, out content))
continue;
}
// strip the HTML
content = content.StripHtml();
// add it to the buffer
buffer.AppendLine(content);
}
// if there is full-text content, add it to the full-text property, otherwise set it to null
modifiedProperties.Set("fullText", buffer.Length > 0 ? buffer.ToString() : null);
}
示例4: Initialize
/// <summary>
/// Initializes the given <paramref name="column"/>.
/// </summary>
/// <param name="context">The <see cref="IMansionContext"/>.</param>
/// <param name="column">The <see cref="PropertyColumn"/> which to initialze.</param>
/// <param name="properties">The properties.</param>
/// <exception cref="ArgumentNullException">Thrown if one of the parameters is null.</exception>
protected static void Initialize(IMansionContext context, PropertyColumn column, IPropertyBag properties)
{
// validate arguments
if (context == null)
throw new ArgumentNullException("context");
if (column == null)
throw new ArgumentNullException("column");
if (properties == null)
throw new ArgumentNullException("properties");
// get the allow null flag
column.AllowNullValue = properties.Get(context, "allowNullValue", false);
// check if there is an expression
string expressionString;
if (properties.TryGet(context, "expression", out expressionString))
{
var expressionService = context.Nucleus.ResolveSingle<IExpressionScriptService>();
column.HasExpression = true;
column.Expression = expressionService.Parse(context, new LiteralResource(expressionString));
}
// get the default value
string defaultValue;
if (properties.TryGet(context, "defaultValue", out defaultValue))
{
var expressionService = context.Nucleus.ResolveSingle<IExpressionScriptService>();
var defaultValueExpression = expressionService.Parse(context, new LiteralResource(defaultValue));
column.DefaultValue = defaultValueExpression.Execute<object>(context);
column.HasDefaultValue = true;
}
}
示例5: DoBeforeUpdate
/// <summary>
/// This method is called just before a node is updated by the repository.
/// </summary>
/// <param name="context">The <see cref="IMansionContext"/>.</param>
/// <param name="node">The node which will be modified.</param>
/// <param name="modifiedProperties">The updated properties of the node.</param>
protected override void DoBeforeUpdate(IMansionContext context, Node node, IPropertyBag modifiedProperties)
{
// if the name has not changed we are not interested
string newName;
if (!modifiedProperties.TryGet(context, "name", out newName))
return;
// if the name has not changed after normalization we are not interested
newName = TagUtilities.Normalize(newName);
if (node.Pointer.Name.Equals(newName))
{
modifiedProperties.Remove("name");
return;
}
modifiedProperties.Set("name", newName);
// if the tag is renamed to another already existing tag, move all content to that existing tag and delete this one
Node existingTag;
var tagIndexNode = TagUtilities.RetrieveTagIndexNode(context);
if (TagUtilities.TryRetrieveTagNode(context, tagIndexNode, newName, out existingTag))
{
// TODO: move all content to the existing tag
// TODO: delete this tag
}
}
示例6: Section
/// <summary>
/// Constructs an section.
/// </summary>
/// <param name="context">The <see cref="IMansionContext"/>.</param>
/// <param name="properties">The descriptor of this section.</param>
/// <param name="expression">The expressio of this section.</param>
public Section(IMansionContext context, IPropertyBag properties, IExpressionScript expression)
{
// validate arguments
if (context == null)
throw new ArgumentNullException("context");
if (properties == null)
throw new ArgumentNullException("properties");
if (expression == null)
throw new ArgumentNullException("expression");
// set values
Properties = properties;
Expression = expression;
Id = Guid.NewGuid().ToString();
Name = Properties.Get<string>(context, "name");
ShouldBeRenderedOnce = !Properties.Get(context, "repeatable", true);
TargetField = Properties.Get(context, "field", Name);
// check if there is a requires property
string requiresExpressionString;
if (Properties.TryGet(context, "requires", out requiresExpressionString))
{
// assemble the expression
var expressionService = context.Nucleus.ResolveSingle<IExpressionScriptService>();
var requiresExpression = expressionService.Parse(context, new LiteralResource(requiresExpressionString));
// execute the expression
areRequirementsSatisfied = requiresExpression.Execute<bool>;
}
else
areRequirementsSatisfied = mansionContext => true;
}
示例7: RecordSet
/// <summary>
/// Creates a filled nodeset.
/// </summary>
/// <param name="context">The <see cref="IMansionContext"/>.</param>
/// <param name="properties"></param>
/// <param name="records"></param>
public RecordSet(IMansionContext context, IPropertyBag properties, IEnumerable<Record> records) : base(properties)
{
// validate arguments
if (records == null)
throw new ArgumentNullException("records");
if (properties == null)
throw new ArgumentNullException("properties");
// set values
foreach (var node in records)
RowCollection.Add(node);
Set("count", RowCollection.Count);
// check for paging
var totalRowCount = properties.Get(context, "totalCount", -1);
var pageNumber = properties.Get(context, "pageNumber", -1);
var rowsPerPage = properties.Get(context, "pageSize", -1);
if (totalRowCount != -1 && pageNumber != -1 && rowsPerPage != -1)
SetPaging(totalRowCount, pageNumber, rowsPerPage);
// check for sort
string sortString;
if (properties.TryGet(context, "sort", out sortString))
{
foreach (var sort in Collections.Sort.Parse(sortString))
AddSort(sort);
}
}
示例8: DoBeforeUpdate
/// <summary>
/// This method is called just before a node is updated by the repository.
/// </summary>
/// <param name="context">The <see cref="IMansionContext"/>.</param>
/// <param name="record"> </param>
/// <param name="properties">The updated properties of the node.</param>
protected override void DoBeforeUpdate(IMansionContext context, Record record, IPropertyBag properties)
{
// get the variables
string currentTheme;
var hasCurrentTheme = record.TryGet(context, "theme", out currentTheme) && !string.IsNullOrEmpty(currentTheme);
string newTheme;
var hasNewTheme = properties.TryGet(context, "theme", out newTheme) && !string.IsNullOrEmpty(newTheme);
// do nothing when the page does not have a theme yet
if (!hasCurrentTheme)
return;
// retrieve the schema of the current theme
var currentThemeSchema = ColumnSchema.GetSchema(context, currentTheme);
// retrieve the blocks of this page
var repository = context.Repository;
var blockNodeset = repository.RetrieveNodeset(context, new PropertyBag
{
{"baseType", "Block"},
{"parentSource", record}
});
// check if a new theme is selected
if (hasNewTheme)
{
// retrieve the schema of the new theme
var newThemeSchema = ColumnSchema.GetSchema(context, newTheme);
// loop through the blocks to find obsolete ones
foreach (var blockNode in blockNodeset.Nodes)
{
// get the column of this block
var column = blockNode.Get<string>(context, "column");
// check if this block lived in the old theme
if (!currentThemeSchema.ContainsColumn(column))
continue;
// check if the column exists in the new theme as well
if (newThemeSchema.ContainsColumn(column))
continue;
// block is obsolete delete it
repository.DeleteNode(context, blockNode);
}
}
else
{
// theme is removed, delete all the theme blocks
foreach (var blockNode in blockNodeset.Nodes.Where(candidate => currentThemeSchema.ContainsColumn(candidate.Get<string>(context, "column"))))
repository.DeleteNode(context, blockNode);
}
base.DoBeforeUpdate(context, record, properties);
}
示例9: Get
/// <summary>
/// Gets the row.
/// </summary>
/// <param name="context">The request context.</param>
/// <param name="attributes">The attributes of this tag.</param>
/// <returns>Returns the result.</returns>
protected override IPropertyBag Get(IMansionContext context, IPropertyBag attributes)
{
// get the url
Url url;
if (!attributes.TryGet(context, "url", out url))
url = context.Cast<IMansionWebContext>().Request.RequestUrl;
// return the property bag representation
return url.ToPropertyBag();
}
示例10: DoBeforeCreate
/// <summary>
/// This method is called just before a node is created by the repository.
/// </summary>
/// <param name="context">The <see cref="IMansionContext"/>.</param>
/// <param name="properties">The new properties of the node.</param>
protected override void DoBeforeCreate(IMansionContext context, IPropertyBag properties)
{
// check if the layout is set
string layout;
if (properties.TryGet(context, "layout", out layout))
return;
// set the layout
properties.TrySet("layout", layout);
}
示例11: DoBeforeCreate
/// <summary>
/// This method is called just before a node is created by the repository.
/// </summary>
/// <param name="context">The <see cref="IMansionContext"/>.</param>
/// <param name="parent">The parent node to which the new child will be added.</param>
/// <param name="newProperties">The new properties of the node.</param>
protected override void DoBeforeCreate(IMansionContext context, Node parent, IPropertyBag newProperties)
{
// check if the layout is set
string layout;
if (newProperties.TryGet(context, "layout", out layout))
return;
if (!parent.TryGet(context, "layout", out layout))
layout = "OneColumnLayout";
// set the layout
newProperties.TrySet("layout", layout);
}
示例12: Evaluate
/// <summary>
/// Gets a value from the script stack.
/// </summary>
/// <param name="context">The <see cref="IMansionContext"/>.</param>
/// <param name="propertyBag">The <see cref="IPropertyBag"/> from which to get the property.</param>
/// <param name="propertyName">The name of the property from which to get the value.</param>
/// <param name="defaultValue">The default value which to return in case the <paramref name="propertyBag"/> does not contain <paramref name="propertyName"/>.</param>
/// <returns>Returns the value of the specified property.</returns>
public object Evaluate(IMansionContext context, IPropertyBag propertyBag, string propertyName, object defaultValue)
{
// validate arguments
if (context == null)
throw new ArgumentNullException("context");
if (propertyBag == null)
throw new ArgumentNullException("propertyBag");
if (string.IsNullOrEmpty(propertyName))
throw new ArgumentNullException("propertyName");
// get the property
object obj;
return !propertyBag.TryGet(context, propertyName, out obj) ? defaultValue : obj;
}
示例13: Retrieve
/// <summary>
/// Builds and executes the query.
/// </summary>
/// <param name="context">The <see cref="IMansionContext"/>.</param>
/// <param name="arguments">The arguments from which to build the query.</param>
/// <param name="repository">The <see cref="IRepository"/>.</param>
/// <param name="parser">The <see cref="IQueryParser"/>.</param>
/// <returns>Returns the result.</returns>
protected override Record Retrieve(IMansionContext context, IPropertyBag arguments, IRepository repository, IQueryParser parser)
{
// get the url
Url url;
if (!arguments.TryGet(context, "url", out url))
url = context.Cast<IMansionWebContext>().Request.RequestUrl;
// parse the query
var query = parser.Parse(context, new PropertyBag
{
{"baseType", "Site"},
{"hostHeaders", url.HostName}
});
// execute the query
return repository.RetrieveSingleNode(context, query);
}
示例14: DoBeforeUpdate
/// <summary>
/// This method is called just before a node is updated by the repository.
/// </summary>
/// <param name="context">The <see cref="IMansionContext"/>.</param>
/// <param name="record"> </param>
/// <param name="properties">The updated properties of the node.</param>
protected override void DoBeforeUpdate(IMansionContext context, Record record, IPropertyBag properties)
{
base.DoBeforeUpdate(context, record, properties);
// check if the identifier was updated
string identifier;
if (!properties.TryGet(context, "identifier", out identifier))
return;
identifier = identifier.Trim().ToLower();
properties.Set("identifier", identifier);
// only update the name with the identifier if the previous name was also derived from the identifier
if (record.Get(context, "name", string.Empty).Equals(record.Get(context, "identifier", string.Empty)))
{
var name = properties.Get(context, "name", identifier).Trim().ToLower();
properties.Set("name", name);
}
}
示例15: Retrieve
/// <summary>
/// Builds and executes the query.
/// </summary>
/// <param name="context">The <see cref="IMansionContext"/>.</param>
/// <param name="arguments">The arguments from which to build the query.</param>
/// <param name="repository">The <see cref="IRepository"/>.</param>
/// <param name="parser">The <see cref="IQueryParser"/>.</param>
/// <returns>Returns the result.</returns>
protected override Record Retrieve(IMansionContext context, IPropertyBag arguments, IRepository repository, IQueryParser parser)
{
// get the url
Url url;
if (!arguments.TryGet(context, "url", out url))
url = context.Cast<IMansionWebContext>().Request.RequestUrl;
// parse the URL for identifiers
IPropertyBag queryAttributes;
if (!nodeUrlService.TryExtractQueryParameters(context.Cast<IMansionWebContext>(), url, out queryAttributes))
return null;
// parse the query
var query = parser.Parse(context, queryAttributes);
// execute the query
return repository.RetrieveSingleNode(context, query);
}