如何将参数传递给ASP.NET MVC中的局部视图?


93

假设我有这个局部视图:

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

这可以通过仅儿童​​操作来访问,例如:

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

}

我想将此局部视图与另一个视图一起使用:

@Html.RenderPartial("FullName")

换句话说,我希望能够从视图到部分视图传递firstName和lastName。我该怎么办?


Answers:


77

使用此重载(RenderPartialExtensions.RenderPartial在MSDN上):

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

所以:

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

1
好吧,尝试了一下,但是我得到了'System.Web.WebPages.WebPageExecutingBase.Write(System.Web.WebPages.HelperResult)'的最佳重载方法匹配,其中包含一些无效的参数错误。我应该如何实现控制器方法?应该有输入参数吗?
Saeed Neamati 2011年

18
因此,您像这样传递了参数,如何在局部视图中访问它?
Burjua

9
您也不需要括号。@Html.Partial()是一样的,@{Html.RenderPartial();}但更漂亮。它们也具有相同的重载。
smdrager 2012年

7
您如何访问对象?Model.firstName并且他们的喜欢抛出了一个例外object doesn't have a 'firstName' property
ashes999

4
您可以通过ViewData访问@ ashes999 ...,但只需创建特定于您的用法的模型,即可使事情保持整洁。使用它一次,有些人可能会认为它是一种折腾,但使用它的次数却更多,这是理所当然的。
Ted

83

如果要使用ViewData,这是另一种方法:

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

并检索传入的值:

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

谢谢,您的回答成功了,而没有为此创建模型。
alvarodms

在所有示例中,这是唯一对我完全有效的示例。谢谢
BrianLegg

这是我一直在寻找的,没有模型。谢谢:)
Anupam Roy

极好的答案-但对于MVC 4,请使用Html.RenderPartial而不是Html.Partial
Graham Laight

24

您需要创建一个视图模型。这样的事情应该做...

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;
     }

}

然后从您的动作结果传递模型

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

你将能够访问@Model.FirstName@Model.LastName相应。


13

确保在Html.RenderPartial周围添加{},如下所示:

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

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

1
局部视图的定义如何?什么是@model声明?它的匿名...
伊丽莎白2015年

是的,请确保添加{ },直到我找到这篇文章,我都浪费了时间
shaijut 2015年

4

以下在dotnet 1.0.1上为我工作:

./ourView.cshtml

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

./_ourPartial.cshtml

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.