private void EmitWriteExpression(WriteExpressionNode node) { LoadWriterToStack(); EvaluateExpression(node.Expression); var valueType = node.Expression.ResultType; if (!writers.ContainsKey(valueType)) { if (valueType.IsValueType) { emitter.Box(valueType); } valueType = typeof(object); } if (node.HtmlEncode && CanHtmlEncodeType(valueType)) { if (valueType == typeof(string)) { emitter.CallMethod(htmlEncodeMethod); } else { emitter.CallMethod(htmlEncodeLateBoundMethod); } } else { CallWriteFor(valueType); } }
private Expression HandleWriteExpression(WriteExpressionNode node) { bool escapeHtml; var expression = ParseExpression(node.Expression, out escapeHtml); if (node.HtmlEncode && escapeHtml) { if (expression.Type == typeof(string)) { return(Expression.Call(encodeMethod, _writer, expression)); } return(Expression.Call(encodeMethodObject, _writer, Expression.Convert(expression, typeof(object)))); } if (expression.Type == typeof(string)) { return(Expression.Call(writeMethod, _writer, expression)); } if (expression.Type == typeof(void)) { return(expression); } return(Expression.Call(writeMethodObject, _writer, Expression.Convert(expression, typeof(object)))); }
protected override JSchema VisitWriteExpressionNode(WriteExpressionNode writeExpressionNode) { var schema = base.VisitWriteExpressionNode(writeExpressionNode); if (schema == null) { return(null); } schema.Type = JSchemaType.String; return(schema); }
protected override IClientModel VisitWriteExpressionNode(WriteExpressionNode writeExpressionNode) { var result = this.VisitExpressionNode(writeExpressionNode.Expression); if (writeExpressionNode.HtmlEncode) { _clientContext.WriteEncodeExpression(result); } else { _clientContext.WriteExpression(result); } return(result); }
private Expression HandleWriteExpression(WriteExpressionNode node) { var expression = ParseExpression(node.Expression); if (expression.Type != typeof(string)) { var toStringMethod = expression.Type.GetMethod("ToString", new Type[0]); expression = Expression.Call(expression, toStringMethod); } if (node.HtmlEncode) { return(Expression.Call(encodeMethod, this.writer, expression)); } return(Expression.Call(this.writer, writeMethod, expression)); }
protected virtual TResult VisitWriteExpressionNode(WriteExpressionNode writeExpressionNode) { return(VisitExpressionNode(writeExpressionNode.Expression)); }