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

Posted

技术标签:

【中文标题】如何将参数传递给 ASP.NET MVC 中的局部视图?【英文标题】:How to pass parameters to a partial view in 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 从视图传递到部分视图。我该怎么做?

【问题讨论】:

非常相关的问题:***.com/questions/1909134/… 【参考方案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) 才能让它工作:***.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

【讨论】:

这没有提供问题的答案。一旦你有足够的reputation,你就可以comment on any post;相反,provide answers that don't require clarification from the asker.

以上是关于如何将参数传递给 ASP.NET MVC 中的局部视图?的主要内容,如果未能解决你的问题,请参考以下文章

如何将模型作为参数传递给 ASP.NET MVC 中的 [HttpPost] ActionMethod?

如何将多个参数传递给 ASP.NET Core 中的 get 方法

如何将参数传递给 jQuery document.ready() 函数(ASP.NET MVC、C#)

ASP.Net MVC:使用 RedirectToAction() 将字符串参数传递给操作

ASP.NET MVC - 将参数传递给控制器

ASP .NET MVC Redirecttoaction 将参数传递给 Index 但值为空