.Net MVC视图无法渲染

时间:2011-10-17 22:13:21

标签: asp.net-mvc-3 asp.net-mvc-routing

我有一个下面列出的控制器:

//
// 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时,即使执行相同的代码地址网址也不会更改为上述内容。并且视图未呈现

我做错了什么?

1 个答案:

答案 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)