繁体   English   中英

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

[英]How to pass parameters to a partial view in ASP.NET MVC?

假设我有这个部分观点:

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

可以通过仅限儿童的操作访问,例如:

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

}

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

@Html.RenderPartial("FullName")

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

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

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

并检索传入的值:

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

使用这个重载( MSDN 上的RenderPartialExtensions.RenderPartial ):

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

所以:

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

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

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

}

然后从您的操作结果中传递 model

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

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

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

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

不是

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

以下在dotnet 1.0.1上为我工作:

./ourView.cshtml

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

./_ourPartial.cshtml

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

只是:

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

在你想展示你的部分的地方,

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

在渲染的局部视图中,

使用 valuePassedIn --> @valuePassedIn

我刚遇到这个问题,我也有类似的情况

我的问题如下:我需要将多个变量传递给我创建的局部视图

我创建的解决方案

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

在上面的代码中,我创建了一个匿名的 object 并发送到视图,下面的代码解释了如何检索通过这个 object 发送的数据

 <span> @Model.UserName </span> <span> @Model.NumberOfProducts </span>

希望这可以帮助

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM