Asp.net mvc ActionLink多次重复相同的GET请求
我正在学习MVC,目前正在制作一个简单的跟踪系统 我遇到的问题是,当单击Ajax.ActionLink时,我会对页面上显示的每个scrum卡运行一次相同的Ajax操作 如您所见,我显示了9张卡,收到了9个相同的get请求。(动作链接实际上是卡右下角的彩色滚轮图像) SingleCard.cshtml(视图)-“ColorPicker”是我的操作的名称Asp.net mvc ActionLink多次重复相同的GET请求,asp.net-mvc,asp.net-mvc-3,asp.net-ajax,Asp.net Mvc,Asp.net Mvc 3,Asp.net Ajax,我正在学习MVC,目前正在制作一个简单的跟踪系统 我遇到的问题是,当单击Ajax.ActionLink时,我会对页面上显示的每个scrum卡运行一次相同的Ajax操作 如您所见,我显示了9张卡,收到了9个相同的get请求。(动作链接实际上是卡右下角的彩色滚轮图像) SingleCard.cshtml(视图)-“ColorPicker”是我的操作的名称 <script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")
<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>
检查页面的HTML。在singlecard.cshtml中有一行:
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>
对于每一张卡片,您都会包含javascript,因此它会被包含9次。因此,将向服务器发送9个请求
解决方案:将脚本include放在页面级别,而不是卡片级别。您尚未显示此
ImageActionLink
自定义帮助程序。你说它像一个普通的ActionLink
一样工作,但是我们在看到它的代码之前无法知道这一点。检查上面的编辑:)谢谢!谢谢:)有人告诉我需要包含该文件才能工作,但不清楚是在哪个级别。这很有道理。虽然我最终摆脱了所有操作链接,而是使用$.ajax处理业务谢谢,HTM调查也解决了我的问题:)
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);
}
}
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>