【问题标题】:Pass AjaxHelper.ActionLink from the server to the view in a model?将 AjaxHelper.ActionLink 从服务器传递到模型中的视图?
【发布时间】:2013-06-11 23:47:57
【问题描述】:

在 ASP.NET MVC 3 中,我希望能够在服务器上创建 AjaxHelper.ActionLink 的可枚举,将其添加到模型,并将模型绑定到视图。然后视图将具有动态数量的 ActionLink。

当我尝试在控制器操作中实例化新的 AjaxHelper 时,它需要 ViewContext 和 IViewDataContainer 之类的东西,所以我有点难过。

理想情况下,我希望有一些工厂来确定如何构造 ActionLink、构造多少以及返回 ViewResult 或 ActionResult。

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

希望这很清楚,但如果不是,我很乐意澄清!

【问题讨论】:

  • 与其在控制器中创建动作链接,为什么不将值保存在模型中的数组中,然后使用这些值在视图中循环遍历该数组以创建动作链接?跨度>
  • 如果我这样做,我仍然需要在视图中定义数量的 ActionLink,而理想情况下我希望视图不知道它会得到多少...如果模型实际上包含 ActionLinks,我希望对可枚举做一个 foreach,然后在页面上拍一下。
  • 抱歉 Slicksim,我发现我错了 - 我可以在构造 ActionLinks 的视图中使用 foreach。

标签: c# asp.net-mvc-3 asp.net-ajax


【解决方案1】:

创建一个名为

的自定义视图

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 干净地重新制作它,我会非常感兴趣。有的话私信我或评论。

【讨论】:

    猜你喜欢
    • 2013-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-11
    • 1970-01-01
    • 2019-09-03
    相关资源
    最近更新 更多