T4MVC没有生成动作

时间:2010-04-10 04:11:20

标签: asp.net-mvc t4mvc

我怀疑在某个地方有一些隐藏的魔法可以阻止T4MVC中到处都是实际的方法调用。然后我有一个视图无法编译,stackTrace进入我的实际方法。

        [Authorize]
    public string Apply(string shortName)
    {
        if (shortName.IsNullOrEmpty())
            return "Failed alliance name was not transmitted";
        if (Request.IsAuthenticated == false || User == null || User.Identity == null)
            return "Apply authentication failed";
        Models.Persistence.AlliancePersistance.Apply(User.Identity.Name, shortName);
        return "Applied";
    }

所以这个方法毕竟不会在模板中生成。

<%=Ajax.ActionLink("Apply", "Apply", new RouteValueDictionary() { { "shortName", item.Shortname } }, new AjaxOptions() { UpdateTargetId = "masterstatus" })%>

            <%=Html.ActionLink("Apply",MVC.Alliance.Apply(item.Shortname),new AjaxOptions() { UpdateTargetId = "masterstatus" }) %>

第二种方法在编译时引发异常,因为我的控制器中的方法Apply具有[Authorize]属性,因此如果未登录的某人点击此内容,则会将其重定向到登录,然后回到这个页面。在那里,他们可以再次点击申请,这次登录。

是的,我发现一个是Ajax.ActionLink,而另一个是Html.ActionLink我用T4MVC版本尝试了它们。

1 个答案:

答案 0 :(得分:2)

更新:我看到了问题。 T4MVC仅支持返回ActionResult的操作,因此它不处理返回字符串的此特定操作。您可以通过更改它来解决此问题:

    [Authorize]
    public ActionResult Apply(string shortName) {
        if (shortName.IsNullOrEmpty())
            return Content("Failed alliance name was not transmitted");
        if (Request.IsAuthenticated == false || User == null || User.Identity == null)
            return Content("Apply authentication failed");
        Models.Persistence.AlliancePersistance.Apply(User.Identity.Name, shortName);
        return Content("Applied");
    }

注意它是如何返回ActionResult,并调用'return Content(“...”)'而不是直接返回字符串。


您能否提供有关您获得的编译异常的更多详细信息?我认为这是你在浏览器中看到的而不是在VS中?你能不能包含错误的全文?

通常,通过MVC前缀的T4MVC调用永远不应该调用实际的操作方法。相反,它们在派生类中调用重写方法。查找一个名为AllianceController.generated.cs(在T4MVC.tt下)的生成文件。你应该在那里看到一个被覆盖的'Apply'方法,这就是T4MVC所需要的。

相关问题