0

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

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

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

谢谢

@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>
4

1 回答 1

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 方法在正常的非 ajax 化请求上执行正常(返回视图/其他内容),您可以添加一个 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();
  } 
}
于 2012-12-13T15:09:09.687 回答