如何将参数传递给 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.ViewData)
"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#)