99

Suppose that I have this partial view:

Your name is <strong>@firstName @lastName</strong>

which is accessible through a child only action like:

[ChildActionOnly]
public ActionResult FullName(string firstName, string lastName)
{

}

And I want to use this partial view inside another view with:

@Html.RenderPartial("FullName")

In other words, I want to be able to pass firstName ans lastName from view to partial view. How should I do that?

1

8 Answers 8

97

Here is another way to do it if you want to use ViewData:

@Html.Partial("~/PathToYourView.cshtml", null, new ViewDataDictionary { { "VariableName", "some value" } })

And to retrieve the passed in values:

@{
    string valuePassedIn = this.ViewData.ContainsKey("VariableName") ? this.ViewData["VariableName"].ToString() : string.Empty;
}
Sign up to request clarification or add additional context in comments.

7 Comments

Thanks, your answer did the trick without creating a model for this.
Out of all the examples, this is the only one that fully worked for me. thanks
This is what i was looking for, no model. thank you :)
Excellent answer - but with MVC 4 use Html.RenderPartial instead of Html.Partial
I had to use new ViewDataDictionary(ViewData) { to get it to work: stackoverflow.com/a/43136848/1741690 so: await Html.RenderPartialAsync("~/PathToYourView.cshtml", null, new ViewDataDictionary(ViewData) { { "VariableName", "some value" } } );
|
81

Use this overload (RenderPartialExtensions.RenderPartial on MSDN):

public static void RenderPartial(
    this HtmlHelper htmlHelper,
    string partialViewName,
    Object model
)

so:

@{Html.RenderPartial(
    "FullName",
    new { firstName = model.FirstName, lastName = model.LastName});
}

10 Comments

Well, tried that, but I'm getting The best overloaded method match for 'System.Web.WebPages.WebPageExecutingBase.Write(System.Web.WebPages.HelperResult)' has some invalid arguments error. How should I implement the controller method? Should it have input parameters?
So you passed parameter like this, how do you access it in partial view?
You also don't need the brackets. @Html.Partial() is the same as @{Html.RenderPartial();} but much prettier. They have the same overloads as well.
How do you access the object? Model.firstName and their like throw an exception that object doesn't have a 'firstName' property
@ashes999 you can access via ViewData... but help keep things tidy by simply creating a model specific to your usage. Use it once and some may consider it a toss up, but use it any more times than that and it's a no-brainer.
|
25

You need to create a view model. Something like this should do...

public class FullNameViewModel
{
     public string FirstName { get; set; }
     public string LastName { get; set; }

     public FullNameViewModel() { } 

     public FullNameViewModel(string firstName, string lastName)
     {
          this.FirstName = firstName;
          this.LastName = lastName;
     }

}

then from your action result pass the model

return View("FullName", new FullNameViewModel("John", "Doe"));

and you will be able to access @Model.FirstName and @Model.LastName accordingly.

Comments

15

make sure you add {} around Html.RenderPartial, as:

@{Html.RenderPartial("FullName", new { firstName = model.FirstName, lastName = model.LastName});}

not

@Html.RenderPartial("FullName", new { firstName = model.FirstName, lastName = model.LastName});

2 Comments

How does the definition of your Partial View looks? What is the @model declaration? Its anonymous...
yes make sure to add { }, i wasted time until i found this article
7

Following is working for me on dotnet 1.0.1:

./ourView.cshtml

@Html.Partial(
  "_ourPartial.cshtml",
  new ViewDataDictionary(this.Vi‌​ewData) {
    {
      "hi", "hello" 
    } 
  }
);

./_ourPartial.cshtml

<h1>@this.ViewData["hi"]</h1>

Comments

1

Just:

@Html.Partial("PartialName", Model);

Comments

0
@{
            Html.RenderPartial("_partialViewName", null, new ViewDataDictionary { { "Key", "Value" } });
        } 

in the place you want to show your partial,

 @{
    string valuePassedIn = this.ViewData.ContainsKey("Key") ? this.ViewData["Key"].ToString() : string.Empty;
}

in the partialview rendered,

To use the valuePassedIn --> @valuePassedIn

1 Comment

This does not provide an answer to the question. Once you have sufficient reputation you will be able to comment on any post; instead, provide answers that don't require clarification from the asker.
0

I just came across this question, and I have a similar situation

my problem is as follows : I have more than one variable I need to pass to the partial view I created

The solution I have created

@{
await Html.RenderPartialAsync("YourPartialViewName",new { NumberOfProducts = ViewData["NumberOfProducts"], UserName = ViewData["UserName"] });
}

In the above code, I created an anonymous object and sent it to the view and the following code is to explain how to retrieve the data that sent through this object

     <span>
          @Model.UserName
      </span>

     <span>
          @Model.NumberOfProducts
      </span>

hope this helps

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.