问题
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:
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});
}
回答2:
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;
}
回答3:
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.
回答4:
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});
回答5:
Following is working for me on dotnet 1.0.1:
./ourView.cshtml
@Html.Partial(
  "_ourPartial.cshtml",
  new ViewDataDictionary(this.ViewData) {
    {
      "hi", "hello" 
    } 
  }
);
./_ourPartial.cshtml
<h1>@this.ViewData["hi"]</h1>
回答6:
Just:
@Html.Partial("PartialName", Model);
来源:https://stackoverflow.com/questions/6549541/how-to-pass-parameters-to-a-partial-view-in-asp-net-mvc