Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Dynamic objects are not getting rendered #75

Closed
karayakar opened this issue Oct 2, 2018 · 2 comments
Closed

Dynamic objects are not getting rendered #75

karayakar opened this issue Oct 2, 2018 · 2 comments

Comments

@karayakar
Copy link

public static string RenderTemplateByFilename(string filename, dynamic obj)
{
try
{
TemplateHolder t = GetTemplateByFileName(filename + ".html");
var template = Template.Parse(t.TemplateCode);
return template.Render( obj ); <----- Fails.
}
catch (Exception ex)
{
return ex.Message;
}

at System.Reflection.RuntimeMethodInfo.InvokeArgumentsCheck(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
at System.Reflection.RuntimePropertyInfo.GetValue(Object obj, Object[] index)
at Scriban.Runtime.ScriptObjectExtensions.Import(IScriptObject script, Object obj, ScriptMemberImportFlags flags, MemberFilterDelegate filter, MemberRenamerDelegate renamer) in C:\projects\scriban\src\Scriban\Runtime\ScriptObjectExtensions.cs:line 267
at Scriban.Runtime.ScriptObjectExtensions.Import(IScriptObject script, Object obj, MemberFilterDelegate filter, MemberRenamerDelegate renamer) in C:\projects\scriban\src\Scriban\Runtime\ScriptObjectExtensions.cs:line 64
at Scriban.Template.Render(Object model, MemberRenamerDelegate memberRenamer, MemberFilterDelegate memberFilter) in C:\projects\scriban\src\Scriban\Template.cs:line 195
at System.Dynamic.UpdateDelegates.UpdateAndExecute2[T0,T1,TRet](CallSite site, T0 arg0, T1 arg1)
at PresenTVCore.TemplateEngine.Model.TemplateModel.RenderTemplateByFilename(String filename, Object obj)

@karayakar karayakar changed the title Dynamic objects are not getting parsed/ Dynamic objects are not getting rendered Oct 2, 2018
@moh-hassan
Copy link

moh-hassan commented Dec 23, 2018

To render a dynamic object, use the dynamic object as an Anonymous object.
You create anonymous types by using the new operator together with an object initializer.

	public  string Render(string text, object obj)
	{
	        var template = Template.Parse(text);
                var result= template.Render( obj , member => member.Name);  
               Console.WriteLine("Result: \n {0}",result);
	  return result;
	}

How to use:

   var test= "Hi {{d.Name}}";
   Console.WriteLine("Template string:  {0}",test);
   //using dynamic
   dynamic d=new {Name="world"};
  var result=Render(test, new {d});

  //using ExpandoObject
  dynamic MyDynamic = new System.Dynamic.ExpandoObject();
  MyDynamic.Name = "Jack";
 result=Render(test, new {d=MyDynamic});

See the demo

@xoofx
Copy link
Member

xoofx commented Dec 28, 2018

Thanks @moh-hassan for the suggestion. I think it is better to go that route when using dynamic objects.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants