作者:87年的第一场雪 | 来源:互联网 | 2023-08-08 12:41
IwanttocreateahelperthaticanaddcontentbetweenthebracketsjustlikeHelper.BeginForm()d
I want to create a helper that i can add content between the brackets just like Helper.BeginForm() does. I wouldnt mind create a Begin, End for my helper but it's pretty simple and easy to do it that way.
我想创建一个帮助器,我可以像Helper.BeginForm()那样在括号之间添加内容。我不介意为我的助手创建一个Begin,End,但这样做非常简单易行。
basically what i am trying to do is wrapping content between these tags so they are rendered already formatted
基本上我想要做的是在这些标签之间包装内容,以便它们呈现已经格式化
something like
就像是
@using Html.Section("full", "The Title")
{
This is the content for this section
More content
@Html.TextFor("text","label")
etc etc etc
}
the parameters "full" is the css id for that div and "the title" is the title of the section.
参数“full”是该div的css id,“title”是该部分的标题。
Is there a better way to achieve this other than doing what i am trying to do?
除了做我想做的事情之外,还有更好的方法来实现这个目标吗?
thanks in advance for any help.
提前感谢您的帮助。
2 个解决方案
36
It's totally possible. The way this is done in MVC with things like Helper.BeginForm
is that the function must return an object that implements IDisposable
.
这完全有可能。在MVC中使用Helper.BeginForm这样的方法是函数必须返回一个实现IDisposable的对象。
The IDisposable
interface defines a single method called Dispose
which is called just before the object is garbage-collected.
IDisposable接口定义了一个名为Dispose的方法,该方法在对象被垃圾收集之前调用。
In C#, the using
keyword is helpful to restrict the scope of an object, and to garbage-collect it as soon as it leaves scope. So, using it with IDisposable
is natural.
在C#中,using关键字有助于限制对象的范围,并在它离开范围时立即对其进行垃圾收集。因此,将它与IDisposable一起使用是很自然的。
You'll want to implement a Section
class which implements IDisposable
. It will have to render the open tag for your section when it is constructed, and render the close tag when it is disposed. For example:
您将需要实现一个实现IDisposable的Section类。它必须在构造时为部分呈现开放标记,并在处理时呈现关闭标记。例如:
public class MySection : IDisposable {
protected HtmlHelper _helper;
public MySection(HtmlHelper helper, string className, string title) {
_helper = helper;
_helper.ViewContext.Writer.Write(
""
);
}
public void Dispose() {
_helper.ViewContext.Writer.Write("
");
}
}
Now that the type is available, you can extend the HtmlHelper.
现在该类型可用,您可以扩展HtmlHelper。
public static MySection BeginSection(this HtmlHelper self, string className, string title) {
return new MySection(self, className, title);
}