C# 是否将AjaxHelper.ActionLink从服务器传递到模型中的视图?
在ASP.NET MVC 3中,我希望能够在服务器上创建AjaxHelper.ActionLink的可枚举项,将其添加到模型,并将模型绑定到视图。视图将具有动态数量的ActionLink 当我尝试在我的控制器操作中实例化一个新的AjaxHelper时,它需要像ViewContext和IViewDataContainer这样的东西,所以我有点困惑 理想情况下,我希望有一些工厂来确定如何构造ActionLink,要构造多少,以及返回ViewResult或ActionResult 我已经做了一些挖掘,但似乎找不到这是可能的还是可以接受的模式C# 是否将AjaxHelper.ActionLink从服务器传递到模型中的视图?,c#,asp.net-mvc-3,asp.net-ajax,C#,Asp.net Mvc 3,Asp.net Ajax,在ASP.NET MVC 3中,我希望能够在服务器上创建AjaxHelper.ActionLink的可枚举项,将其添加到模型,并将模型绑定到视图。视图将具有动态数量的ActionLink 当我尝试在我的控制器操作中实例化一个新的AjaxHelper时,它需要像ViewContext和IViewDataContainer这样的东西,所以我有点困惑 理想情况下,我希望有一些工厂来确定如何构造ActionLink,要构造多少,以及返回ViewResult或ActionResult 我已经做了一些挖掘,
希望这是相当清楚的,但我很高兴澄清,如果不是 创建一个名为 AjaxLinkSpatial.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)
}
}
主要的缺点是,这不是一个干净的分离风格和其他关注点。如果你能用HtmlHelpers干净地重新制作这个,我会非常感兴趣。如果需要,请PM me或评论。与其在控制器中创建操作链接,为什么不在模型中的数组中保存值,并使用值在视图中循环该数组以创建操作链接?如果这样做,我仍然需要在视图中定义数量的操作链接,然而理想情况下,我希望视图不知道它将得到多少。。。如果模型实际上包含ActionLinks,我希望在可枚举上做一个foreach,然后在页面上点击它们。对不起,Slicksim,我发现我错了-我可以在视图中有一个foreach来构造ActionLinks。
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)