asp.net-mvc - Ajax.ActionLink 多次重复相同的 GET 请求

标签 asp.net-mvc asp.net-mvc-3 asp.net-ajax

我正在学习 MVC,目前正在制作一个简单的 SCRUM我一路走来的跟踪系统。

我遇到的问题是,当单击 Ajax.ActionLink 时,我会为页面上显示的每个 scrum 卡运行一次相同的 ajax 操作。

enter image description here

如您所见,我显示了 9 张卡片,并且收到了 9 个相同的 GET 请求。 (操作链接实际上是卡片右下角的色轮图像)。

SingleCard.cshtml( View )-“ColorPicker”是我的操作的名称。

<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>

...

<div class="card_footer" id="card_footer_id_@(Model.ID)">
    <div class="card_tags">
        [Tag1] [Tag2] [Tag3]
    </div>
    <div class="card_colorwheel_icon">
    @Ajax.ImageActionLink("../Content/Images/color_wheel.png", "Color Wheel", "ColorPicker", new { cardid = Model.ID }, new AjaxOptions { UpdateTargetId = "ColorPickerDisplay" })
    </div>
</div>

ImageActionLink 是我正在使用的一个助手,但它的工作原理与普通的 ActionLink 完全相同

HomeController.cs( Controller )

    public ActionResult ColorPicker(int cardid)
    {
        var currentcard = db.Cards.Single(x => x.ID == cardid);

        var colors = new List<CardRGB>();
        var cards = db.Cards.ToList();
        foreach (var card in cards)
        {
            colors.Add(new CardRGB 
                {
                    CardId = card.ID,
                    Red = (int)card.BG_Red,
                    Blue = (int)card.BG_Blue,
                    Green = (int)card.BG_Green
                });
        }

        // disctint

        var model = new ColorPickerViewModel()
        {
            Colors = colors,
            Red = (int) currentcard.BG_Red,
            Green = (int) currentcard.BG_Green,
            Blue = (int) currentcard.BG_Blue
        };

        return PartialView(model);
    }

有谁知道为什么此代码每张卡运行一次?

编辑:根据要求!

public static class ImageActionLinkHelper
{
    public static MvcHtmlString ImageActionLink(
        this AjaxHelper helper,
        string imageUrl,
        string altText,
        string actionName,
        object routeValues,
        AjaxOptions ajaxOptions)
        {
            var builder = new TagBuilder("img");
            builder.MergeAttribute("src", imageUrl);
            builder.MergeAttribute("alt", altText);
            builder.MergeAttribute("title", altText);
            var link = helper.ActionLink("[replaceme]", actionName, routeValues, ajaxOptions);
            var html = link.ToHtmlString().Replace("[replaceme]", builder.ToString(TagRenderMode.SelfClosing));
            return new MvcHtmlString(html);
        }
}

最佳答案

检查页面的 HTML。在您的 singlecard.cshtml 中有一行:

    <script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>

对于每张卡片,您再次包含 javascript,因此它包含了 9 次。因此将向服务器发送 9 个请求。

解决方案:将脚本包含放在页面级别,而不是卡级别。

关于asp.net-mvc - Ajax.ActionLink 多次重复相同的 GET 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6768978/

相关文章:

c# - MVC 3 - 按行显示项目集合

asp.net-mvc-3 - $ ajax中带有asp.net mvc 3的相对URL

asp.net-mvc - Razor 语法在 UI 标记方面是否提供了令人信服的优势?

asp.net-mvc-3 - 从 View 访问RouteData.Values的最简单方法

asp.net - ASP.NET Ajax 库死了吗?

asp.net-mvc - “A potentially dangerous Request.Form value was detected from the client”

asp.net-mvc - kendoValidator() 在使用 DatePicker 时导致 “The field xxx must be a date” 错误

c# - 如何仅在最小字符后检查密码强度?

c# - 如何在它调用的 asmx 中获取对 Page 对象的引用

jquery - 在 MVC 4 中查找警报或通知