使用Razor在Nancy中创建类似BeginForm的Html帮助器

时间:2013-08-23 12:06:43

标签: c# razor nancy

我们正在使用自托管的Nancy服务器,我正在使用Razor viewengine来提供Web视图。 我正在研究创建自定义HtmlHelpers并且能够使用简单的示例。但是我想做的一件事就是一个像BeginForm()一样工作的帮助器,你可以在标记中使用using语句在using块的开头和结尾创建输出。

@using (Html.BeginForm())
{
    <some html here>
}

我发现的所有示例都基于Asp.Net MVC,就像在这个答案中一样:https://stackoverflow.com/a/7928566/1128038
它似乎在Nancy实现中的工作方式不同。 这有可能吗?

3 个答案:

答案 0 :(得分:3)

尝试使用这样的扩展方法:

public static class HtmlHelperExtensions
{
    public static BeginFormObject BeginForm(this HtmlHelpers helpers, NancyRazorViewBase view)
    {
        return new BeginFormObject("<form method=\"post\">", view);
    }

    public class BeginFormObject : IDisposable
    {
        private NancyRazorViewBase view;
        public BeginFormObject(string markup, NancyRazorViewBase view)
        {
            this.view = view;
            view.WriteLiteral(markup);
        }

        public void Dispose()
        {
            view.WriteLiteral("</form>");
        }
    }
}

这允许在剃刀中使用以下语法:

@using (Html.BeginForm(this))
{
....other stuff
}

答案 1 :(得分:0)

答案 2 :(得分:0)

基于Piotr answer
我刚刚在GitHub中创建了一个存储库来测试它。

这是Mix Self托管和Razor的简单解决方案。

检查您是否正在搜索:
NancySelfHostRazorTest

祝你好运。