从控制器传递参数到视图
Passing parameter from controller to view
我正在处理一个 C# MVC 项目,需要将一些数据从控制器传递到所有视图。
我的任务是将网页保存为 pdf 文件。
总共有 5 个页面,所以有 5 个不同的视图,我还有 5 个控制器,每个视图一个。
我创建了控制器的扩展 class,因此所有控制器都可以使用其中的功能。
因为我需要以不同的方式呈现视图,所以我需要将一个参数传递给每个视图以切换显示(即,如果它用于生成 pdf,我只需要视图上的主要内容,没有菜单和链接,否则显示整个视图。)
这是我的实现:
ControllerExtension.cs
public GenerateAllPagesAsPdf
{
bool DisplayMainContentOnly = True;
SaveWebPagetoPDF(MVC.Controller1.Index(DisplayMainContentOnly ), pdf1)
SaveWebPagetoPDF(MVC.Controller2.Index(DisplayMainContentOnly ), pdf2)
SaveWebPagetoPDF(MVC.Controller3.Index(DisplayMainContentOnly ), pdf3)
SaveWebPagetoPDF(MVC.Controller4.Index(DisplayMainContentOnly ), pdf4)
SaveWebPagetoPDF(MVC.Controller5.Index(DisplayMainContentOnly ), pdf5)
DisplayMainContentOnly = False;
}
Controller1.cs
[HttpGet]
[Page("View1")]
public virtual ActionResult Index(bool DisplayMainContentOnly)
{
TempData["mainOnly"] = DisplayMainContentOnly;
model1 = new Model();
return this.View(model1);
}
View1.cshtml
@{
bool mainOnly= (bool)TempData["mainOnly"];
}
@if (mainOnly) {
<div>
<h2>@Html.Heading()</h2>
@RenderBody()
</div>
} else {
<div>
<h2>@Html.Heading()</h2>
@RenderBody()
</div>
<div id="mc-column-wrapper">
@Html.Action(MVC.Home.Menu())
</div>
}
所有其他控制器和视图都具有相同的 Controller1 和 View1 实现,使用 TempData 目录传递参数。我不想将这个 bool 变量添加到视图的每个模型中
我试图在我的 ControllerExtension class 中设置 TempData 目录,但它没有将参数传递给视图
只是想知道,有没有其他方法可以将参数传递给所有视图,而不是传递给所有控制器的操作?
感谢
我做了一些研究,最终找到了适合我需要的以下解决方案,不太确定这是否是最好的方法。
函数SaveWebPagetoPDF(string url, string outputFileName)正在转换传入的url网页,并将转换后的文件保存为pdf文件。
我在 SaveWebPagetoPDF 函数中添加了一个额外的步骤,将参数附加到 url 作为查询字符串。
url = url + "?DisplayMainContentOnly=true";
在我看来,我没有检查 TempData,而是检查了 QueryString:
bool mainOnly= Request.QueryString["DisplayMainContentOnly"] == null? false : Request.QueryString["DisplayMainContentOnly"] == "true";
通过这样做,我不再需要向我的所有控制器操作方法添加参数
[HttpGet]
[Page("View1")]
public virtual ActionResult Index()
{
model1 = new Model();
return this.View(model1);
}
我正在处理一个 C# MVC 项目,需要将一些数据从控制器传递到所有视图。
我的任务是将网页保存为 pdf 文件。
总共有 5 个页面,所以有 5 个不同的视图,我还有 5 个控制器,每个视图一个。
我创建了控制器的扩展 class,因此所有控制器都可以使用其中的功能。
因为我需要以不同的方式呈现视图,所以我需要将一个参数传递给每个视图以切换显示(即,如果它用于生成 pdf,我只需要视图上的主要内容,没有菜单和链接,否则显示整个视图。)
这是我的实现:
ControllerExtension.cs
public GenerateAllPagesAsPdf
{
bool DisplayMainContentOnly = True;
SaveWebPagetoPDF(MVC.Controller1.Index(DisplayMainContentOnly ), pdf1)
SaveWebPagetoPDF(MVC.Controller2.Index(DisplayMainContentOnly ), pdf2)
SaveWebPagetoPDF(MVC.Controller3.Index(DisplayMainContentOnly ), pdf3)
SaveWebPagetoPDF(MVC.Controller4.Index(DisplayMainContentOnly ), pdf4)
SaveWebPagetoPDF(MVC.Controller5.Index(DisplayMainContentOnly ), pdf5)
DisplayMainContentOnly = False;
}
Controller1.cs
[HttpGet]
[Page("View1")]
public virtual ActionResult Index(bool DisplayMainContentOnly)
{
TempData["mainOnly"] = DisplayMainContentOnly;
model1 = new Model();
return this.View(model1);
}
View1.cshtml
@{
bool mainOnly= (bool)TempData["mainOnly"];
}
@if (mainOnly) {
<div>
<h2>@Html.Heading()</h2>
@RenderBody()
</div>
} else {
<div>
<h2>@Html.Heading()</h2>
@RenderBody()
</div>
<div id="mc-column-wrapper">
@Html.Action(MVC.Home.Menu())
</div>
}
所有其他控制器和视图都具有相同的 Controller1 和 View1 实现,使用 TempData 目录传递参数。我不想将这个 bool 变量添加到视图的每个模型中
我试图在我的 ControllerExtension class 中设置 TempData 目录,但它没有将参数传递给视图
只是想知道,有没有其他方法可以将参数传递给所有视图,而不是传递给所有控制器的操作?
感谢
我做了一些研究,最终找到了适合我需要的以下解决方案,不太确定这是否是最好的方法。
函数SaveWebPagetoPDF(string url, string outputFileName)正在转换传入的url网页,并将转换后的文件保存为pdf文件。
我在 SaveWebPagetoPDF 函数中添加了一个额外的步骤,将参数附加到 url 作为查询字符串。
url = url + "?DisplayMainContentOnly=true";
在我看来,我没有检查 TempData,而是检查了 QueryString:
bool mainOnly= Request.QueryString["DisplayMainContentOnly"] == null? false : Request.QueryString["DisplayMainContentOnly"] == "true";
通过这样做,我不再需要向我的所有控制器操作方法添加参数
[HttpGet]
[Page("View1")]
public virtual ActionResult Index()
{
model1 = new Model();
return this.View(model1);
}