通过AjaxHelper.从服务器到模型视图的ActionLink

本文关键字:视图 ActionLink 模型 AjaxHelper 服务器 通过 | 更新日期: 2023-09-27 18:18:01

. NET MVC 3,我想能够创建一个AjaxHelper的枚举。将其添加到模型中,并将模型绑定到视图。该视图将有一个动态的ActionLink数。

当我尝试实例化一个新的AjaxHelper在我的控制器动作,它需要的东西,如ViewContext和IViewDataContainer,所以我有点困惑。

理想情况下,我想有一些工厂,做决定如何构造ActionLink的工作,多少构造,并返回一个ViewResult或ActionResult。

我已经做了一些挖掘,但似乎无法找到这是否可能或一个可接受的模式…

希望这是非常清楚的,但我很高兴澄清如果不是!

通过AjaxHelper.从服务器到模型视图的ActionLink

创建一个自定义视图

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重新制作这个,我会非常感兴趣。如果有的话,请留言给我。