如何在Razor部分视图中传递HTML?

6

我想将HTML传递到我的局部视图中,就像这样:

@Html.Partial("_MyForm", "<button id='foo'>Process Data</button>")

目前这种方式可行,但是传递字符串的方式不够优雅。以前可以使用 IHTMLString 代替字符串进行操作(请参见链接):

public class HTMLViewModel
{
    public Func<object, IHtmlString> Content { get; set; }
}

@Html.Partial("_MyForm", new HTMLViewModel()
{
    Content =  
    @<button>
       <h1>Hello World</h1>
    </button>
})

IHTMLString在.NET Core中已经不存在了,那么还能用其他功能来实现相同的方法吗?

2个回答

4
你可以使用IHtmlContent来维护你当前的方法:
public Func<object, IHtmlContent> Content { get; set; }

然后在局部文件中:

@model HTMLViewModel
@Model.Content(null)

根据您使用的.NET Core版本,您还可以利用一些内联函数标记更改。请参阅此处讨论的内容:https://github.com/aspnet/AspNetCore-Tooling/pull/334

2
这还是走的正确方式吗? - trickreich

0
对于aspnet core razor,请查看“Templated Razor delegates” documentation
你的语法应该可以工作:
public class HTMLViewModel
{
    public Func<dynamic, object> Content { get; set; }
}

@Html.Partial("_MyForm", new HTMLViewModel()
{
    Content =  
    @<button>
       <h1>Hello World</h1>
    </button>
})

更一般地说,您还可以创建强类型模板:
Func<T, object> template = @<div>@item.Foo</div>;

(其中T是您的类型)。
然后,您可以将该函数传递给其他地方(传递给您的部分视图),并按照以下方式调用:
@template(new T { Foo = "Bar" })

请注意,传入的参数通过@item进行访问。(我的VS会对此显示红色波浪线,但可以忽略!)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接