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- 0px; border-style: solid; } 效果还是不错的,比起自己扩展HtmlHelper要方便许多,但是这种方式还是有违MVC的初衷,但是我觉得适当的使用,而不滥用,应该在一定环境下还是可以用用的,毕竟节省了不少时间。
来源:http://hi.baidu.com/jackeyrain/item/bb7dc41edec6b9fa9d778a1f