xiecs
xiecs

Reputation: 727

asp.net Core 1 RenderPartial ViewDataDictionary

I am re-writing a website in VS 2017 that was originally written in VS 2010. The command I used originally to display my visitor count in the footer was:- @Html.RenderPartial( "/Counter/Counter.ascx", new ViewDataDictionary {{ "digits", 6 }, { "id", "Count" }}). This displayed the number in Count.txt as 6 digits using digits.gif as the pattern. When I try and use the same code in VS 2017, I get the following error message: 'ViewDataDictionary' does not contain a constructor that takes 0 arguments. I have spent a lot of time looking at similar questions in this forum and on other sites and have been unable to find an answer. Any help you can give me will be most appreciated.

Upvotes: 0

Views: 1825

Answers (2)

Robert Massa
Robert Massa

Reputation: 4608

Another way to use this is to pass the ViewData of the current view into the constructor. That way the new ViewDataDictionary gets extended with the items you put in using the collection initializer.

@Html.Partial("MyPartial", new ViewDataDictionary(ViewData) { { "digits", 6 } })

Upvotes: 3

cpr43
cpr43

Reputation: 3112

When i went to implementation of the ViewDataDictionaryo:

namespace Microsoft.AspNetCore.Mvc.ViewFeatures
{
    public ViewDataDictionary(IModelMetadataProvider metadataProvider,
                                          ModelStateDictionary modelState);
}

Possible solution

    new ViewDataDictionary(
 new Microsoft.AspNetCore.Mvc.ModelBinding.EmptyModelMetadataProvider(),
 new Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary())
 {{ "digits", 6 }, { "id", "Count" }}

Upvotes: 1

Related Questions