【问题标题】:How to pass parameters to a partial view in ASP.NET MVC?如何将参数传递给 ASP.NET MVC 中的局部视图?
【发布时间】:2011-09-26 19:57:47
【问题描述】:

假设我有这个局部视图:

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

可通过以下儿童专用操作访问:

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

}

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

@Html.RenderPartial("FullName")

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

【问题讨论】:

标签: asp.net-mvc asp.net-mvc-3 model-view-controller controller asp.net-mvc-partialview


【解决方案1】:

如果您想使用 ViewData,这里还有另一种方法:

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

并检索传入的值:

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

【讨论】:

  • 谢谢,您的回答没有为此创建模型就成功了。
  • 在所有示例中,这是唯一一个完全适合我的示例。谢谢
  • 这是我要找的,没有型号。谢谢你:)
  • 优秀的答案 - 但在 MVC 4 中使用 Html.RenderPartial 而不是 Html.Partial
  • 我必须使用new ViewDataDictionary(ViewData) { 才能让它工作:stackoverflow.com/a/43136848/1741690 所以:await Html.RenderPartialAsync("~/PathToYourView.cshtml", null, new ViewDataDictionary(ViewData) { { "VariableName", "some value" } } );
【解决方案2】:

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

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

所以:

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

【讨论】:

  • 好吧,试过了,但我得到 'System.Web.WebPages.WebPageExecutingBase.Write(System.Web.WebPages.HelperResult)' 的最佳重载方法匹配有一些无效参数错误。我应该如何实现控制器方法?它应该有输入参数吗?
  • 你这样传递参数,如何在局部视图中访问它?
  • 你也不需要括号。 @Html.Partial()@{Html.RenderPartial();} 相同,但更漂亮。它们也有相同的重载。
  • 如何访问对象? Model.firstName 和他们的类似抛出异常 object doesn't have a 'firstName' property
  • @ashes999 您可以通过 ViewData 访问...但是通过简单地创建一个特定于您使用的模型来帮助保持整洁。使用一次,有些人可能会认为它是一个折腾,但使用它的次数超过它,它是一个明智的选择。
【解决方案3】:

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

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

【讨论】:

    【解决方案4】:

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

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

    不是

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

    【讨论】:

    • 局部视图的定义看起来如何? @model 声明是什么?它的匿名...
    • 是的,请确保添加{ },我浪费时间直到找到this 文章
    【解决方案5】:

    以下在 dotnet 1.0.1 上为我工作:

    ./ourView.cshtml

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

    ./_ourPartial.cshtml

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

    【讨论】:

      【解决方案6】:

      只是:

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

      【讨论】:

        【解决方案7】:
        @{
                    Html.RenderPartial("_partialViewName", null, new ViewDataDictionary { { "Key", "Value" } });
                } 
        

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

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

        在渲染的局部视图中,

        使用 valuePassedIn --> @valuePassedIn

        【讨论】:

        猜你喜欢
        • 2013-07-14
        • 2014-01-14
        • 1970-01-01
        • 2018-02-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-04
        相关资源
        最近更新 更多