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

Sae*_*ati 87 model-view-controller asp.net-mvc controller asp.net-mvc-partialview asp.net-mvc-3

假设我有这个局部视图:

Your name is <strong>@firstName @lastName</strong>
Run Code Online (Sandbox Code Playgroud)

这可以通过仅限儿童的动作来访问:

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

}
Run Code Online (Sandbox Code Playgroud)

我想在另一个视图中使用这个局部视图:

@Html.RenderPartial("FullName")
Run Code Online (Sandbox Code Playgroud)

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

Dav*_*ick 77

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

public static void RenderPartial(
    this HtmlHelper htmlHelper,
    string partialViewName,
    Object model
)
Run Code Online (Sandbox Code Playgroud)

所以:

@{Html.RenderPartial(
    "FullName",
    new { firstName = model.FirstName, lastName = model.LastName});
}
Run Code Online (Sandbox Code Playgroud)

  • 所以你传递了这样的参数,你如何在局部视图中访问它? (16认同)
  • 您也不需要括号.`@Html.Partial()`与`@ {Html.RenderPartial();}`相同,但更漂亮.它们也有相同的重载. (9认同)
  • 你如何访问该对象?`Model.firstName`和他们喜欢抛出一个异常,即`对象没有'firstName'属性` (7认同)
  • @ ashes999你可以通过ViewData访问...但只需创建一个特定于你的用途的模型,帮助保持整洁.使用它一次,有些人可能认为它是一个折腾,但使用它比这更多次,这是一个明智的选择. (4认同)

Gar*_*ish 77

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

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

并检索传入的值:

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

  • 我必须使用 `new ViewDataDictionary(ViewData) {` 才能使其工作:/sf/answers/3019579391/ 所以: `await Html.RenderPartialAsync("~/PathToYourView.cshtml", null, new ViewDataDictionary(ViewData) { { "VariableName", "某个值" } } );` (2认同)

sim*_*lds 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;
     }

}
Run Code Online (Sandbox Code Playgroud)

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

return View("FullName", new FullNameViewModel("John", "Doe"));
Run Code Online (Sandbox Code Playgroud)

并且您将能够访问@Model.FirstName@Model.LastName相应地访问.


Bla*_*erX 13

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

@{Html.RenderPartial("FullName", new { firstName = model.FirstName, lastName = model.LastName});}
Run Code Online (Sandbox Code Playgroud)

@Html.RenderPartial("FullName", new { firstName = model.FirstName, lastName = model.LastName});
Run Code Online (Sandbox Code Playgroud)

  • 您的部分视图的定义如何?什么是@model 声明?它的匿名... (2认同)

lak*_*are 5

以下在dotnet 1.0.1上为我工作:

./ourView.cshtml

@Html.Partial(
  "_ourPartial.cshtml",
  new ViewDataDictionary(this.Vi??ewData) {
    {
      "hi", "hello" 
    } 
  }
);
Run Code Online (Sandbox Code Playgroud)

./_ourPartial.cshtml

<h1>@this.ViewData["hi"]</h1>
Run Code Online (Sandbox Code Playgroud)