MVC razor 使用服务器控件

MVC调用服务器控件 MVC是不提倡使用服务器控件的,一贯摒弃原有的postback的方式。但是有时候发现现有的MVC扩展确实还没有到达需要的目的,原来asp.net的控件很好用,但在MVC中自己编写又太过麻烦,往往还需要编写很多的JS代码,如果在MVC中也能适当的使用服务器控件就太好了,例如treeview。在网上看到一篇类似的思路,很不错,记录下来。

在Controller中

        public ActionResult TreeViewDemo()

        {

            // 创建节点数据

            TreeView tw = new TreeView();

            tw.ID = "uiTree";

            tw.ShowLines = true;

            tw.ViewStateMode = ViewStateMode.Disabled;




            TreeNode node1 = new TreeNode();

            node1.Text = "One";

            node1.Value = "1";

            node1.NavigateUrl = "http://www.baidu.com";

            node1.Target = "_blank";




            TreeNode node2 = new TreeNode();

            node2.Text = "Two";

            node2.Value = "2";




            TreeNode node3 = new TreeNode();

            node3.Text = "Three";

            node3.Value = "3";




            TreeNode node = new TreeNode();

            node.Text = "Top";

            node.Value = "0";




            node.ChildNodes.Add(node1);

            node.ChildNodes.Add(node2);

            node.ChildNodes.Add(node3);




            tw.Nodes.Add(node);




            // 将treeview放入form中

            HtmlForm hf = new HtmlForm();

            hf.Controls.Add(tw);

            // hf.Attributes["runat"] = "server";




            // 再放入page中,最后进行文本转换

            Page page = new Page();

            string controlOutput = string.Empty;

            page.Controls.Add(hf);




            // 将page转换成html文本

            StringBuilder sb = new StringBuilder();

            using (StringWriter sw = new StringWriter(sb))

            {

                using (HtmlTextWriter htw = new HtmlTextWriter(sw))

                {

                    Server.Execute(page, htw, false);

                    controlOutput = sb.ToString();

                }

            }




            // 传递到view中

            ViewBag.treeView = controlOutput;

            return View();

        }




在View中就可以简单的调用了

@Html.Raw(ViewBag.treeView)





后来发现,在某些情况下会神奇的出现边框

因此加上style

    #uiTree table td

    {

        padding: 0px;

        margin: 0px;

        border-color: #000000;

        border-width: 0px;

        border-style: solid;

    }

效果还是不错的,比起自己扩展HtmlHelper要方便许多,但是这种方式还是有违MVC的初衷,但是我觉得适当的使用,而不滥用,应该在一定环境下还是可以用用的,毕竟节省了不少时间。


来源:http://hi.baidu.com/jackeyrain/item/bb7dc41edec6b9fa9d778a1f

posted @ 2013-08-28 16:30  刘满意  阅读(2766)  评论(0编辑  收藏  举报