如何在没有页面更改的情况下触发控制器上的操作

时间:2012-12-13 14:53:54

标签: asp.net razor

我的主视图中有一个部分视图,其中列出了许多项目。 Razor已经为我正确生成了这个局部视图,并插入了动作链接(使用@ Html.ActionLink命令),指向控制器上的动作并发送正确的id。 一切正常但我希望保持这样,不必返回任何东西!

现在我被迫发回一些东西(内容,视图,重定向等),它改变了主视图,我不希望这样。

我想要做的就是在服务器上采取行动并将其留在那里。 我还能做什么?

由于

@model IEnumerable<PopupForm.Models.BOExplorerItem>

<h3>Explorer (partial)<br />
    There are @Model.Count() explorer items.
</h3>

<ul class="ulexplorer">

    @foreach (var item in Model)
    {
        <li>
            <div class="boitem">
                <h5>@item.FullName [<i> @item.Code </i>]</h5>
                <span>Level: @item.Level</span>
                @Html.ActionLink("Select", "SelectEntity", "Explorer", new { code = @item.Code }, null)
            </div>
        </li>
    }

</ul>

1 个答案:

答案 0 :(得分:0)

您可以做的是听取链接的点击事件并进行ajax调用而不是正常的重定向行为。让ajax调用你想要执行的代码。

因此,改变你的链接,将css类应用于我们的链接,以便我们可以将它用作我们的jQuery元素选择器。

@Html.ActionLink("Select", "SelectEntity", "Explorer",
                            new { code = @item.Code }, new { @class="ajaxLink"})

现在有一些javascript可以绕过点击事件

$(function(){
  $("a.ajaxLink").click(function(e){
    var _item=$(this);
    e.preventDefault();  //prevent default behaviour
    $.get(_item.attr("href");
  });
});

如果您希望Action方法在正常的非ajaxified请求上执行正常(返回View / Other内容),您可以添加if条件检查以查看请求是否为ajax

public ActionResult SelectEntity()
{
  if (Request.IsAjaxRequest())
  {
    //Execute your method and return a Json result to keep the compiler happy.
    return Json(new {Status="Success"},JsonRequestBehavior.AllowGet);
  }
  else
  {
     //Return the normal view,
     return View();
  } 
}