Razor / Mvc4网页糟糕的重定向Html.ActionLink

时间:2014-06-05 03:01:22

标签: c# asp.net-mvc asp.net-mvc-4 razor

我是新来的,我会尽力说清楚。

我正在与Razor / Mvc4建立一个论坛,问题是当我尝试使用它时:

 @Html.ActionLink(@elemento.nombre, "Temas", "Categorias", new { id = @i, onclick = 
 "javascript:IdCat(this)" })

我不知道为什么,但当我按下链接时,它会将我重定向到Home / Temas,我想去分类/ Tema。

在我的项目中,我有两个控制器,HomeController和CategoriasController,我认为一切正常,但它会重定向到Home / Temas。

public class CategoriasController : Controller
{
    public ActionResult Temas()
    {
        Session["user_name"] = Session["user_name"];
        Session["IDG"] = Session["IDG"];
        Session["ID"] = Session["ID"];

        Tema tem = new Tema();
        List<Tema> temas = new List<Tema>(); 
        temas = tem.ObtenerTemasPorCategoriaID(int.Parse(Session["idCat"].ToString()));

        Categoria cat = new Categoria();
        ViewBag.NombreCat = cat.obtenerNombreCategoriaById(int.Parse(Session["idCat"].ToString()));

        return View();
    }

}

希望有人可以提供帮助。非常感谢。

3 个答案:

答案 0 :(得分:2)

好吧,你的Razor语法不正确。在@帮助程序调用中引用变量时,不应包含@Html.ActionLink()转义前缀:

 @Html.ActionLink(elemento.nombre, "Temas", "Categorias", new { id = i, onclick = 
 "javascript:IdCat(this)" })

@唯一有效的时间是您要转义关键字,例如@class = someClass

此外,您应该意识到onclick电话可能会覆盖您的链接。 onclick函数将执行 previous 以跟踪超链接。仅当函数返回true 时,才会跟随链接。如果函数返回false将不会跟踪链接!

答案 1 :(得分:2)

由于几个原因,您使用的Html.ActionLink的重载不正确。

首先,onclick不是RouteValueParameter,实际上应该在Html.ActionLink的HtmlAttributes部分。其次,我认为你实际需要的重载是(注意控制器将被移动到Object routevalues参数):

public static MvcHtmlString ActionLink(
    this HtmlHelper htmlHelper,
    string linkText,
    string actionName,
    Object routeValues,
    Object htmlAttributes
)

如上所述,正确的语法应该是:

 @Html.ActionLink(elemento.nombre, "Temas", new { controller="Categorias", nid = i}, new {onclick = = "javascript:IdCat(this)" })

如果您仍然遇到问题,我认为您应该考虑检查您的路线定义,以确保您的路线不正确。此外,javascript也可能导致问题,而且没有看到JavaScript代码,可能很难说。我在上面看到你正在用JavaScript设置一个Session变量(因为一个是客户端而一个是服务器端 - 而Session是完全服务器端的,所以它不起作用)。您应该能够在“Temas”ActionResult中设置会话,而无需使用JavaScript。

可用Html.ActionLink()重载的完整列表为available here。 的修改

您正在发送ID,但您的ActionResult方法并未查找它。将控制器中的ActionResult更改为以下内容(请注意,我们已将您从ActionLink传递的nid添加到函数的参数中):

public ActionResult Temas(int nid)
    {
    Session["user_name"] = Session["user_name"];
    Session["IDG"] = Session["IDG"];
    Session["ID"] = Session["ID"];

    Tema tem = new Tema();
    List<Tema> temas = new List<Tema>(); 
    temas = tem.ObtenerTemasPorCategoriaID(nid);

    Categoria cat = new Categoria();
    ViewBag.NombreCat = cat.obtenerNombreCategoriaById(nid);

    return View();
}

答案 2 :(得分:-1)

试试这个

       @Html.ActionLink(@elemento.nombre, "Temas", "Categorias",  new { id = @i} ,new{onclick = "javascript:IdCat(this)" })

欢呼声