我是ASP.Net MVC的新手,并且一直使用Web Forms。我找到了Replacement for ITemplate in MVC?,它给出了一个创建一个名为BeginBlock的HTML助手的例子,它包装了标题&内容来自:
@using (Html.BeginBlock("MY TITLE")) {
MY CONTENT GOES HERE
}
到
<div>
<div><h1>MY TITLE</h1></div>
</div>
MY CONTENT GOES HERE
我有一个场景,在Web窗体中,我们曾经使用多个ITemplates来定义用户控件中的容器,然后我们将其包装在HTML中,例如,在Web窗体中,我们可以创建一个名为Panel的用户控件并拥有两个ITemplate属性,一个名为Content,另一个名为ContentNonScrollable。然后,我们将使用以下标记来使用用户控件:
<MySite:Panel>
<Content>
Content 1 Goes Here
</Content>
<ContentNonScrollable>
Content 2 goes here
</ContentNonScrollable>
</MySite:Panel>
然后,用户控件将输出以下内容,HTML:
<div class="my-panel">
<div class="my-panel-content">
Content 1 Goes Here
</div>
<div class="my-scrollable-panel-content">
Content 2 Goes Here
</div>
</div>
在MVC中有没有办法,通过HTML Helpers(或其他任何东西),我们可以通过.cshtml模板文件中的标记来设计与上述Web Forms示例等效的东西?
例如类似的东西(显然,下面没有正确的语法,只是为了解释我们的想法):
@using (Html.BeginPanel() {
{
Content 1 Goes Here
}
{
Content 2 Goes Here
}
}
答案 0 :(得分:1)
您可以使用此部分。截面是为布局(即母版页)设计的,但您可以嵌套母版页以创建剖面区域。
但是,听起来你想把它作为某种类型的控制。另一种选择可能是Templated Razor Delegates
另一个选项是编辑器/显示模板,尽管这通常不是标记。您可以使用变量来传递内容。
另一种选择是使用部分视图,并使用ViewData传递上下文部分。
实际上有很多不同的方法可以解决这个问题,您选择哪种方式取决于您的需求。你能解释具体情况吗?
答案 1 :(得分:0)
我不明白为什么不。我自己没有尝试过,但由于你可以在.cshtml页面中混合使用标记和脚本,你应该可以做类似的事情
@using (Html.BeginPanel()) {
@using(Html.BeginScrollableContent()) {
Content 1 goes here
}
@using (Html.BeginNonScrollableContent()) {
Content 2 goes here
}
}
我查看了你引用的帖子(一个好的,BTW),你应该能够在实现过程中遵循这个例子。
答案 2 :(得分:0)
感谢@mystere引导我走向模板化代表和部分视图,这些视图采用带有接受字符串和html标记的变量的模型,我找到了以下解决方法,这与我在上面的场景中的想法相当
创建名为_PanelPartial.cshtml
的部分视图,并将模型设置为_PanelPartialModel
类型,其中包含以下属性:
public class _PanelPartialModel
{
public Func<dynamic, HelperResult> Content { get; set; }
public Func<dynamic, HelperResult> NonScrollableContent { get; set; }
}
在_PanelPartial.cshtml
中,您可以使用以下内容:
@model _PanelPartialModel
<div class="my-testing-panel">
<p>hello this is heading text</p>
<div class="my-testing-panel-content">
@Model.Content(null)
</div>
<p>And this is something in between madafuker!</p>
<div class="my-testing-panel-scrollable-content">
@Model.NonScrollableContent(null)
</div>
<p>and what about another footer!</p>
</div>
@ Model.Content(null)和@ Model.NonScrollableContent(null)是模型中委托变量的调用。这些服务器作为占位符。
然后,只要您需要使用此面板,就可以使用以下内容:
@Html.Partial("_PanelPartial", new _PanelPartialModel() {
Content = @<text>
<div>This is the scrollable content</div>
</text>,
NonScrollableContent = @<text>
<h2>This is non scrollable content</h2>
</text>
});
这将最终生成以下HTML标记:
<div class="my-testing-panel">
<p>hello this is heading text</p>
<div class="my-testing-panel-content">
<div>This is the scrollable content</div>
</div>
<p>And this is something in between madafuker!</p>
<div class="my-testing-panel-scrollable-content">
<h2>This is non scrollable content</h2>
</div>
<p>and what about another footer!</p>
</div>