MVC Razor @Functions 创建文本框

MVC Razor @Functions create textbox

我正在使用 vNext(带有 Core 5.0 的 MVC6)。

我在我的一个视图中声明了 'functions',在其中我有一个方法可以创建一个文本框并将其添加到视图中。

@functions {
    public void CreateTextBox()
    {
        @Html.Raw(@Html.TextBox("a", "b"));
    }
}

这不会创建文本框元素,但如果我执行下面的代码,则会创建一个文本框:

@functions {
    public HtmlString CreateTextBox()
    {
        return @Html.TextBox("a", "b");
    }
}

@using (Html.BeginForm())
{
    @Html.Raw(CreateTextBox());
}

我的问题是:是否可以通过 CreateTextBox() 方法在不返回任何内容且不使用 Html.BeginForm() 的情况下创建文本框?那么有没有办法使第一个选项起作用?

不需要函数@Html.BeginForm()。只需将 @Html.Raw(@Html.TextBox("a", "b")); 放入您的 HTML 代码中想要放置一个文本框,它将呈现一个文本框。

使用助手。函数用于实际上应该在 ViewModel 中的东西(即将模型值转换为可打印值),助手在那里帮助输出 HTML。

将其粘贴到您的 App_Code 目录中名为 FormHelpers.cshtml:

的文件中
@helper PrintFormWithOneTextBox
{
    @using (Html.BeginForm())
    {
        @Html.TextBox("a", "b");
    }
}

然后你可以使用@FormHelpers.PrintFormWithOneTextBox()调用它。