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
转载于:https://www.cnblogs.com/lmy213/p/3287502.html