Skip to content

Commit

Permalink
pass ViewDataDictionary to the partial view
Browse files Browse the repository at this point in the history
  • Loading branch information
Albert0617 committed Jul 16, 2016
1 parent 7e96494 commit 0fde81d
Showing 1 changed file with 10 additions and 4 deletions.
14 changes: 10 additions & 4 deletions src/MyToolkit.AspNet.Mvc/Html/CollectionEditorExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -28,32 +28,38 @@ public static class CollectionEditorExtensions
/// <param name="controllerActionPath">The controller action path to generate a new item editor.</param>
/// <param name="addButtonTitle">The title of the add button.</param>
/// <param name="addButtonHtmlAttributes">The HTML attributes of the add button.</param>
/// <param name="viewDataDictionary">The ViewDataDictionary for the partial view.</param>
/// <returns>The HTML string. </returns>
public static IHtmlString CollectionEditorFor<TModel, TItem>(this HtmlHelper<TModel> html,
Func<TModel, IEnumerable<TItem>> collection, string partialViewName,
string controllerActionPath, string addButtonTitle, object addButtonHtmlAttributes = null)
string controllerActionPath, string addButtonTitle, object addButtonHtmlAttributes = null, ViewDataDictionary viewDataDictionary = null)
{
var editorId = "CollectionEditor_" + Guid.NewGuid().ToString("N");
var addButtonId = "CollectionEditorAdd_" + Guid.NewGuid().ToString("N");

var output = new StringBuilder();

RenderInitialCollection(output, html, collection, partialViewName, editorId);
RenderInitialCollection(output, html, collection, partialViewName, editorId, viewDataDictionary);
RenderAddButton(output, addButtonId, addButtonTitle, addButtonHtmlAttributes);
RenderEditorScript(controllerActionPath, output, editorId, addButtonId);

return new HtmlString(output.ToString());
}

private static void RenderInitialCollection<TModel, TItem>(StringBuilder output, HtmlHelper<TModel> html,
Func<TModel, IEnumerable<TItem>> collection, string partialViewName, string editorId)
Func<TModel, IEnumerable<TItem>> collection, string partialViewName, string editorId, ViewDataDictionary viewDataDictionary = null)
{
output.AppendLine(@"<ul id=""" + editorId + @""" style=""list-style-type: none; padding: 0"">");
var items = collection(html.ViewData.Model);
if (items != null)
{
foreach (var item in collection(html.ViewData.Model))
output.AppendLine(html.Partial(partialViewName, item).ToString());
{
if (viewDataDictionary != null)
output.AppendLine(html.Partial(partialViewName, item, viewDataDictionary).ToString());
else
output.AppendLine(html.Partial(partialViewName, item).ToString());
}
}
output.AppendLine(@"</ul>");
}
Expand Down

0 comments on commit 0fde81d

Please sign in to comment.