0
我試圖通過一個控制器在我的佈局中使用的局部視圖,像這樣:asp.net的MVC - 嘗試有部分觀點在我的佈局和獲得:
_Layout.cshtml
:
<ul id="menu">
<li>@Html.Action("Menu")</li>
<li>@Html.ActionLink("Home", "Index", "Home")</li>
<li>@Html.ActionLink("About", "About", "Home")</li>
<li>@Html.ActionLink("Contact", "Contact", "Home")</li>
</ul>
MenuController.cs
:
public class MenuController : Controller
{
//
// GET: /Menu/
public ActionResult Index()
{
var menu = new Models.Menu()
{
Items = new List<Models.MenuItem>()
{
new Models.BaseMenuBtn() { Label = "One", Link= "Home", CssClass="a"},
new Models.BaseMenuBtn() { Label = "One", Link= "Home", CssClass="b"}
}
};
return View();
}
}
個模型:
Menu.cs
:
public class Menu : MenuItem
{
public List<MenuItem> Items { get; set; }
public override string Render()
{
StringBuilder sb = new StringBuilder("<div>");
foreach (var item in Items)
{
sb.Append(item.Render());
}
sb.Append("</div>");
return sb.ToString();
}
public Menu()
{
Items = new List<Models.MenuItem>()
{
new Models.BaseMenuBtn() { Label = "One", Link= "Home", CssClass="a"},
new Models.BaseMenuBtn() { Label = "One", Link= "Home", CssClass="b"}
};
}
}
MenuItem.cs
:
public abstract class MenuItem
{
public string CssClass { get; set; }
public abstract string Render();
}
BaseMenuBtn.cs
public class BaseMenuBtn : MenuItem
{
public string Label { get; set; }
public string Link { get; set; }
public override string Render()
{
return string.Format("<div href='{0}' class='{1}'> {2} </div>", this.Link , this.CssClass, this.Label);
}
}
而且,從我在佈局中增加了行,我得到這個錯誤:
Error executing child request for handler 'System.Web.Mvc.HttpHandlerUtil+ServerExecuteHttpHandlerAsyncWrapper'.
請幫助。
'mvc'模式的想法是分離編碼和標記。所以在模型中使用html是不好的做法。我沒有用'asp.net mvc'做很多事情,但通常這是違反mvc模式的,IMO。 – Leri
你的'Menu'控制器的'Index.cshtml'在哪裏? –
你是對的,我只是爲了在我把所有東西都放到位之前第一次看到這個作品。 – Zephram