Asp.net mvc 如何为抽象基类的派生类定义asp.net Htmlhelper扩展?

Asp.net mvc 如何为抽象基类的派生类定义asp.net Htmlhelper扩展?,asp.net-mvc,asp.net-mvc-5,Asp.net Mvc,Asp.net Mvc 5,换句话说,我想做以下工作: public abstract class Shape { public virtual RenderHTML(); } public class Circle : Shape { public override RenderHTML() {} } public class Square : Shape { public override RenderHTML() {} } public class MyViewModel {

换句话说,我想做以下工作:

public abstract class Shape {
    public virtual RenderHTML();
}

public class Circle : Shape {
    public override RenderHTML() {}
}  

public class Square : Shape {
    public override RenderHTML() {}
}

public class MyViewModel {
    public Shape shape;
}

// single call to render HTML for whatever shape is needed
// should call on render method for Circle or Square depending on type of Shape
@Html.RenderShape(Model.shape)
我该怎么做? 我需要以某种方式将实例传递到HTML助手中


编辑:找到了一个类似的答案

下面是一个非常基本的实现方法,说明了如何实现这样的目标:

public static class HtmlHelperExtensions
{
    public static IHtmlString RenderShape(this HtmlHelper helper,
        Shape shape)
    {
        return MvcHtmlString.Create(shape.RenderHtml());
    }
}

其中
RenderHtml()
将返回一个带有未编码HTML的字符串。

您应该在
Shape
类中定义抽象方法(即
Render()
),并在具体子类中重写它。有关更多详细信息,请参见类似示例:我知道我可以覆盖基类派生类上的渲染,我不知道的部分是如何定义一个自动启用此功能的HTMLHelper,我将更新问题以使其更清晰。我正在寻找一个解决方案,它以某种方式将类型传递到HTML帮助程序方法本身。太棒了,谢谢!从razor视图看,对助手的调用是什么样子的?它会是@Html.RenderShape(Model.shape)吗?@SandeepPhadke不确定我为什么要做这个通用的,但我现在已经解决了。无论如何,
@Html.RenderShape(Model.Shape)
就是您所需要的。