void AddDataBindingLiteral (ControlBuilder builder, DataBindingBuilder db) { if (db.Code == null || db.Code.Trim () == "") return; EnsureID (db); CreateField (db, false); string dbMethodName = "__DataBind_" + db.ID; // Add the method that builds the DataBoundLiteralControl InitMethod (db, false, false); CodeMemberMethod method = db.Method; AddEventAssign (method, builder, "DataBinding", typeof (EventHandler), dbMethodName); method.Statements.Add (new CodeMethodReturnStatement (ctrlVar)); // Add the DataBind handler method = CreateDBMethod (builder, dbMethodName, GetContainerType (builder), typeof (DataBoundLiteralControl)); builder.DataBindingMethod = method; CodeVariableReferenceExpression targetExpr = new CodeVariableReferenceExpression ("target"); CodeMethodInvokeExpression invoke = new CodeMethodInvokeExpression (); invoke.Method = new CodeMethodReferenceExpression (targetExpr, "SetDataBoundString"); invoke.Parameters.Add (new CodePrimitiveExpression (0)); CodeMethodInvokeExpression tostring = new CodeMethodInvokeExpression (); tostring.Method = new CodeMethodReferenceExpression ( new CodeTypeReferenceExpression (typeof (Convert)), "ToString"); tostring.Parameters.Add (new CodeSnippetExpression (db.Code)); invoke.Parameters.Add (tostring); method.Statements.Add (AddLinePragma (invoke, builder)); mainClass.Members.Add (method); AddChildCall (builder, db); }
bool ProcessCode (TagType tagtype, string code, ILocation location) { PageParserFilter pfilter = PageParserFilter; // LAMESPEC: // // http://msdn.microsoft.com/en-us/library/system.web.ui.pageparserfilter.processcodeconstruct.aspx // // The above page says if false is returned then we should NOT process the // code further, wheras in reality it's the other way around. The // ProcessCodeConstruct return value means whether or not the filter // _processed_ the code. // if (pfilter != null && (!pfilter.AllowCode || pfilter.ProcessCodeConstruct (MapTagTypeToConstructType (tagtype), code))) return true; ControlBuilder b = null; if (tagtype == TagType.CodeRender) b = new CodeRenderBuilder (code, false, location); else if (tagtype == TagType.CodeRenderExpression) b = new CodeRenderBuilder (code, true, location); else if (tagtype == TagType.DataBinding) b = new DataBindingBuilder (code, location); #if NET_4_0 else if (tagtype == TagType.CodeRenderEncode) b = new CodeRenderBuilder (code, true, location, true); #endif else throw new HttpException ("Should never happen"); stack.Builder.AppendSubBuilder (b); return true; }
bool ProcessCode (TagType tagtype, string code, ILocation location) { ControlBuilder b = null; if (tagtype == TagType.CodeRender) b = new CodeRenderBuilder (code, false, location); else if (tagtype == TagType.CodeRenderExpression) b = new CodeRenderBuilder (code, true, location); else if (tagtype == TagType.DataBinding) b = new DataBindingBuilder (code, location); else throw new HttpException ("Should never happen"); stack.Builder.AppendSubBuilder (b); return true; }