我有一个下面列出的控制器:
//
// GET: /Customer/Details/5
public ActionResult Details(short id)
{
ActionResult actionResult = null;
if (HttpContext.User.IsInRole("Admin"))
{
// this is the logic that is getting executed
YeagerTechWcfService.Customer cust = db.GetCustomerID(Convert.ToInt16(id));
actionResult = View("Details", cust); }
else
{
HttpCookie cn = Request.Cookies["strCookieName"];
if (cn != null)
{
YeagerTechWcfService.Customer cust = db.GetCustomerID(Convert.ToInt16(id));
actionResult = View("Details", cust);
}
else
{
TempData["ErrCode"] = "CustView";
actionResult = RedirectToAction("Index", "Home");
}
}
return actionResult;
}
我有一个View(ActionLink所在的位置),如下所示:
columns.Template(
@<text>
@Ajax.ActionLink("Detail", "Details", "Customer", new { id = item.CustomerID },
new AjaxOptions { InsertionMode = InsertionMode.Replace, UpdateTargetId = "detailCustomer" })
</text>
).Width(70);
渲染的输出现在如下:
<a data-ajax="true" data-ajax-mode="replace" data-ajax-update="#detailCustomer" href="/Customer/Details/2">Detail</a>
如果我在浏览器的源视图中点击链接,我就可以使用我的新视图。
但是,如果我尝试点击 ActionLink ,则视图不会出现。我可以在调试期间验证,在我点击控制器代码之后,我正在通过详细信息视图。当前视图保持不变,无需切换到新视图。
此外,我可以看到,如果我点击ActionLink,它会执行完全相同的代码(在调试期间),就像我将其粘贴到地址栏中一样:
的http://本地主机:4514 /客户/详情/ 2
当我点击ActionLink时,即使执行相同的代码,地址网址也不会更改为上述内容。并且视图未呈现
我做错了什么?
答案 0 :(得分:5)
即使执行相同的代码,地址网址也不会改变 到上面
您正在使用Ajax.ActionLink
,这意味着它将发送一个AJAX请求。 AJAX的重点是保持在同一页面而不是重定向。
您指出UpdateTargetId = "detailCustomer"
,因此请确保您的网页中有一个包含此ID的容器:
<div id="detailCustomer"></div>
将使用AJAX调用的结果进行更新。另外,请确保您已将jquery.unobtrusive-ajax.js
脚本正确地包含在您的网页中,以便Ajax.ActionLink
帮助程序执行任何有用的操作。
另一方面,如果您想要执行完整的回发并更改浏览器的网址,您可能需要一个标准链接:
Html.ActionLink("Detail", "Details", "Customer", new { id = item.CustomerID }, null)