在ASP.NET MVC 3中,我希望能够在服务器上创建一个可枚举的AjaxHelper.ActionLink,将其添加到模型中,并将模型绑定到视图。然后,视图将具有动态数量的ActionLink。
当我尝试在我的控制器动作中实例化一个新的AjaxHelper时,它需要像ViewContext和IViewDataContainer这样的东西,所以我有点难过。
理想情况下,我希望有一些工厂负责确定如何构建ActionLink,构建多少,以及返回ViewResult或ActionResult。
我已经做了一些挖掘,但似乎无法找到这是可能的还是可接受的模式......
希望这很清楚,但如果没有,我很乐意澄清!
答案 0 :(得分:0)
创建名为
的自定义视图AjaxLinksPartial.cshtml
@Scripts.Render("~/bundles/jquery") @*You need this included, probably in your main layout*@
@Scripts.Render("~/bundles/jqueryval")
<div id ="Target"></div>
@{foreach (var link in Model.LinkItems)
{
@Ajax.ActionLink(link.Text, link.Action, link.Controller, null, Model.AjaxOptions, Model.HtmlAttrbs)
}
}
使用支持模型AjaxLinks
public class AjaxLinks
{
public List<LinkItem> LinkItems { get; set; }
public AjaxOptions AjaxOptions { get; set; }
public Dictionary<string, Object> HtmlAttrbs { get; set; }
public AjaxLinks(AjaxOptions options, Dictionary<string, Object> htmlAttrbutes)
{
LinkItems = new List<LinkItem>();
this.AjaxOptions = options;
this.HtmlAttrbs = htmlAttrbutes;
}
}
public class LinkItem
{
public string Text { get; set; }
public string Controller { get; set; }
public string Action { get; set; }
public LinkItem(string Text, string Controller, string Action)
{
this.Text = Text;
this.Controller = Controller;
this.Action = Action;
}
}
在控制器中使用如下
var htmlAttributes = new Dictionary<string, Object>();
htmlAttributes.Add("class", "linkstyling class");
var ajaxOptions = new AjaxOptions { InsertionMode = InsertionMode.Replace, UpdateTargetId = "Target", HttpMethod = "POST"};
var links = new AjaxLinks(ajaxOptions, htmlAttributes);
links.LinkItems.Add(new LinkItem("About","Home","About"));
并在另一个视图中呈现它
@Html.Partial("AjaxLinksPartial", Model)
主要缺点是这不是造型与其他问题的清晰分离。如果你能够使用HtmlHelpers干净地重新制作它,我会非常感兴趣。 PM我或你的评论。