Rob*_*ozo 2 asp.net-mvc asp.net-ajax asp.net-mvc-3
我正在学习MVC,我正在制作一个简单的SCRUM跟踪系统.
我遇到的问题是,当单击Ajax.ActionLink时,我会对页面上显示的每个scrum卡运行一次相同的ajax操作.

如您所见,我显示了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>
Run Code Online (Sandbox Code Playgroud)
ImageActionLink是我正在使用的帮助程序,但它的工作方式与普通的ActionLink完全相同
HomeController.cs(控制器)
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);
}
Run Code Online (Sandbox Code Playgroud)
有谁知道为什么这个代码每张卡运行一次?
编辑:按要求!
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);
}
}
Run Code Online (Sandbox Code Playgroud)
检查您网页的HTML.在你的singlecard.cshtml中有一行:
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>
Run Code Online (Sandbox Code Playgroud)
对于每张卡,您再次包含javascript,因此它包含9次.因此,9个请求将被发送到服务器.
解决方案:将脚本包含放在页面级别,而不是卡级别.
| 归档时间: |
|
| 查看次数: |
4287 次 |
| 最近记录: |