ASP MVC 4创建自定义的HTML帮助类似于Html.BeginForm方法 [英] Asp MVC 4 creating custom html helper method similar to Html.BeginForm

查看:90
本文介绍了ASP MVC 4创建自定义的HTML帮助类似于Html.BeginForm方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下的html:

 < D​​IV数据绑定=stopBindings>    < D​​IV数据viewId =languageList数据绑定=有:视图模型>
       <表>
              &所述; TR>
                   < TD><标签=availableLanguages​​>可用语言:< /标签>< / TD>
              < / TR>
       <表>
    < / DIV>< / DIV>

我想打一个自定义的HTML帮助,并使用它像这样(类似于 Html.BeginForm

  @ Html.BeginView()
{
    <表>
        &所述; TR>
            < TD><标签=availableLanguages​​>可用语言:< /标签>< / TD>
        < / TR>
    < /表>
}

我开始做我的助手方法

 公共静态类BeginViewHelper
    {
        公共静态MvcHtmlString BeginView(此的HtmlHelper帮手,串viewId)
        {            VAR parentDiv =新TagBuilder(分区);
            parentDiv.MergeAttribute(数据绑定,preventBinding:真正的);
            返回新MvcHtmlString();
        }    }

我读了如何进行基本的HTML帮助,但我看到了不给我信息,如何让它在我的情况的例子。我很新的asp的MVC和每个帮助将大大AP preciated。

更新2:

显然我失去了一些东西。我打电话这在我的观点:

  @ Html.BeginView()
{
    <表>
        &所述; TR>
            < TD><标签>测试与LT; /标签>< / TD>
        < / TR>
    < /表>
}

一切似乎罚款甚至有智能感知。但在浏览器中的输出是下面的:

  Omega.UI.WebMvc.Helpers.BeginViewHelper + MyView的{
测试 }

这是我的helper方法:

 命名空间Omega.UI.WebMvc.Helpers
{
    公共静态类BeginViewHelper
    {
        公共静态IDisposable的BeginView(此的HtmlHelper助手)
        {
            helper.ViewContext.Writer.Write(< D​​IV数据绑定= \\preventBinding:真正的\\>中);
            helper.ViewContext.Writer.Write(< D​​IV数据viewId = \\测试\\>中);            返回新的MyView的(辅助);
        }        类MyView的:IDisposable接口
        {
            私人的HtmlHelper _helper;            公共MyView的(辅助性的HtmlHelper)
            {
                this._helper =帮手;
            }            公共无效的Dispose()
            {
                this._helper.ViewContext.Writer.Write(< / DIV>中);
                this._helper.ViewContext.Writer.Write(< / DIV>中);
            }
        }
    }
}

和我已经注册了命名空间在〜/查看/ web.config中

 <添加命名空间=Omega.UI.WebMvc.Helpers/>


解决方案

您不能返回MvcHtmlString。相反的,你应该写HTML到实现IDisposable作家和返回类和调用Dispose会写关闭您的HTML的部分时间。

 公共静态类BeginViewHelper
{
    公共静态IDisposable的BeginView(此的HtmlHelper帮手,串viewId)
    {
        helper.ViewContext.Writer.Write(的String.Format(< D​​IV ID ='{0}>中,viewId));        返回新的MyView的(辅助);
    }    类MyView的:IDisposable接口
    {
        私人的HtmlHelper帮手;        公共MyView的(辅助性的HtmlHelper)
        {
            this.helper =帮手;
        }        公共无效的Dispose()
        {
            this.helper.ViewContext.Writer.Write(< / DIV>中);
        }
    }
}

如果你有更复杂的结构,你可以尝试使用TagBuilder:

  TagBuilder TB =新TagBuilder(分区);
helper.ViewContext.Writer.Write(tb.ToString(TagRenderMode.StartTag));

I have the following html:

<div data-bind="stopBindings">

    <div data-viewId="languageList" data-bind="with: viewModel">
       <table>
              <tr>
                   <td ><label for="availableLanguages">Available Languages:</label></td>
              </tr>
       <table>
    </div>

</div>

I want to make a custom html helper and use it like this (similar to Html.BeginForm)

@Html.BeginView()
{
    <table>
        <tr>
            <td ><label for="availableLanguages">Available Languages:</label></td>
        </tr>
    </table>
}

I started making my helper method

public static class BeginViewHelper
    {
        public static MvcHtmlString BeginView(this HtmlHelper helper, string viewId)
        {

            var parentDiv = new TagBuilder("div");
            parentDiv.MergeAttribute("data-bind", "preventBinding: true");
            return new MvcHtmlString();
        }

    }

I read how to make basic html helper but the examples I saw does not give me information how to make it in my case. I am very new to asp mvc and every help will be greatly appreciated.

UPDATE 2:

Obviously I am missing something. I am calling this in my view:

@Html.BeginView()
{
    <table>
        <tr>
            <td ><label >test</label></td>
        </tr>
    </table>
}

Everything seems fine it even has intellisense. But the output in the browser is the following:

Omega.UI.WebMvc.Helpers.BeginViewHelper+MyView { 


test

 } 

This is my helper method:

namespace Omega.UI.WebMvc.Helpers
{
    public static class BeginViewHelper
    {
        public static IDisposable BeginView(this HtmlHelper helper)
        {
            helper.ViewContext.Writer.Write("<div data-bind=\"preventBinding: true\">");
            helper.ViewContext.Writer.Write("<div data-viewId=\"test\">");

            return new MyView(helper);
        }

        class MyView : IDisposable
        {
            private HtmlHelper _helper;

            public MyView(HtmlHelper helper)
            {
                this._helper = helper;
            }

            public void Dispose()
            {
                this._helper.ViewContext.Writer.Write("</div>");
                this._helper.ViewContext.Writer.Write("</div>");
            }
        }
    }
}

and I have registered the namespace in ~/Views/web.config

 <add namespace="Omega.UI.WebMvc.Helpers" />

解决方案

You can't return MvcHtmlString. Instead of that you should write html to the writer and return class that implement IDisposable and during invoking Dispose will write closing part of your HTML.

public static class BeginViewHelper
{
    public static IDisposable BeginView(this HtmlHelper helper, string viewId)
    {
        helper.ViewContext.Writer.Write(string.Format("<div id='{0}'>", viewId));

        return new MyView(helper);
    }

    class MyView : IDisposable
    {
        private HtmlHelper helper;

        public MyView(HtmlHelper helper)
        {
            this.helper = helper;
        }

        public void Dispose()
        {
            this.helper.ViewContext.Writer.Write("</div>");
        }
    }
}

If you have more complex structure you can try to use TagBuilder:

TagBuilder tb = new TagBuilder("div");
helper.ViewContext.Writer.Write(tb.ToString(TagRenderMode.StartTag));

这篇关于ASP MVC 4创建自定义的HTML帮助类似于Html.BeginForm方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆