Using a partial file from a variable name

Skip to first unread message

Chad Lee

Nov 9, 2008, 10:28:50 AM11/9/08
to Spark List
Is something like this possible within a spark file with templateToRender == "myTemplate":

<viewdata templateToRender="string" />

<use file="templateToRender" />

and have the partial file named myTemplate rendered?  What would be the best way to go about accomplishing this?

Louis DeJardin

Nov 9, 2008, 10:59:24 PM11/9/08
to Spark View Engine Dev

I'm not sure you'd ever be able to do that with the <use file="">
mechanics. The way partials are imported is generating all of the code
chunks in-place, so it'd never be practical to include all of the

If there was a known set of templates you could always include them
statically and use the templateToRender as a selector...

<use file="foo" if="templateToRender='foo'"/>
<use file="bar" elseif="templateToRender='bar'"/>
<use file="quux" elseif="templateToRender='quux'"/>
<use file="quad" elseif="templateToRender='quad'"/>
<else><% throw new ApplicationException("Unknown templateToRender: " +
templateToRender); %></else>

or if they start with underscores it could also be written:

<foo if="templateToRender='foo'"/>
<bar elseif="templateToRender='bar'"/>
<quux elseif="templateToRender='quux'"/>
<quad elseif="templateToRender='quad'"/>
<else><% throw new ApplicationException("Unknown templateToRender: " +
templateToRender); %></else>

If you're looking for something that's literally dynamic... Maybe make
a view component and pass the template to render as a parameter? You
could use that param in the call to RenderView.

<Module viewname="templateToRender"/>

class ModuleComponent : ViewComponent
[parameter] public string viewname{get;set;}

public void Render()

which would restrict you to having all of your views located at:

Asp.Net MVC has Html.RenderPartial(viewname) of course, but other than
with a viewcomponent-renderview I'm not sure what else you would do in
monorail to have the same result.

Any of those seem reasonable? I guess you could also make a helper
that reaches back into the view engine to render a view and return it
as a string. Probably bump into a lot of complex internals getting
that route to work.

Chad Lee

Nov 10, 2008, 12:02:02 PM11/10/08
Thanks for the ideas, Louis.  I like the idea of using a ViewComponent.  It would make the logic of choosing the view testable and provides better encapsulation.  It also accomplishes my original goal of dynamically rendering a partial view based off of some condition.

thanks :)


Mar 4, 2014, 5:55:34 PM3/4/14
Hi. I have the same problem. I wish to dynamically use files, but I am using SparkView standalone (without MVC). Do you have any suggestions ? 

Robert Greyling

Mar 4, 2014, 5:58:46 PM3/4/14
Hi there,

Take a look at the samples dealing with Spark standalone usage. This one uses a simple console app to render views:


You received this message because you are subscribed to the Google Groups "Spark View Engine Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to
To post to this group, send email to
Visit this group at
For more options, visit

Oytun Yılmaz

Mar 4, 2014, 7:51:22 PM3/4/14
Thanks a lot for the info Robert. 
I guess I am not specific enough with my question sorry about that.

I already have a working setup where I use the sample you provided. My problem is that I need to use partial rendering with a dynamic filename. A File name which is generated at runtime. Specifically:

<use file="${GetFileName()}"></use>

I know it is impossible in a normal MVC setup but since I have more control over the rendering process due to standalone usage I though maybe there is a way out ?


Robert Greyling

Mar 5, 2014, 3:15:48 AM3/5/14
Hi Oytun,

You certainly can do something like this but the syntax won't necessarily look like what you've got because of how spark renders out variables during the html rendering process. I've done something like this in the past where the first part of it was done in memory rendering (by calling into the SparkViewEngine directly) to new spark views and storing results in a in memory IViewFolder and then a second phase using files on disk in the <use file /> parts that were created in the first phase.

Perhaps you can have a go at doing something like that, but in order to help you further, I would need some kind of minimal example you have and see which parts of your code operate from disk and in memory.

There might also be a better way to tackle this entirely once I see some code and understand your challenge better.

Make sense?
Reply all
Reply to author
0 new messages