如何将操作名从控制器传递到视图

时间:2015-12-18 07:11:29

标签: asp.net-mvc razor

我是razor的新手,我需要帮助才能使用ViewBag将操作名称从控制器传递到视图。以下是我的代码:

    public ActionResult Index(int id = 0)
    {
        ViewBag.MasterId = id;
        ViewBag.ActionName = "ApplicationProcess";
        return View();
    }

从上面的动作方法我传递的动作名称正在视图中使用,该动作名称是在此函数的结果中呈现的。

<body>
    <h2>Index</h2>
    <div style="width: 1100px;">
        <div style="float: left; width: 400px;">
            @{Html.RenderAction("MasterRecordProcess", "Process");}
        </div>
        <div style="float: right">
            @{Html.RenderAction("MasterRecordBasicInfo", "Process", new { id = ViewBag.MasterId });}
        </div>
        <div style="float:right;margin-top:50px;" class="task-div">
            @{Html.RenderAction(@ViewBag.ActionName, "Process", null);}
        </div>
    </div>
</body>

现在在上面的视图中我想使用 Html.RenderAction 中从控制器传递的 ViewBag.ActionName ,但这给了我错误信息。

Compilation Error

Description: An error occurred during the compilation of a resource required to service this request. Please review the following specific error details and modify your source code appropriately. 

Compiler Error Message: CS1973: 'System.Web.Mvc.HtmlHelper<OAC.Areas.Personal.Models.MasterModel>' has no applicable method named 'RenderAction' but appears to have an extension method by that name. Extension methods cannot be dynamically dispatched. Consider casting the dynamic arguments or calling the extension method without the extension method syntax.

请帮助我如何在viewBag对象中呈现从控制器传递的动作名称。谢谢。

2 个答案:

答案 0 :(得分:1)

正如@Stephen所提到的,你必须首先投射视包内容:

@{
    var actionName= (string)ViewBag.ActionName;
}

然后你可以使用它:

@{Html.RenderAction(actionName, "Process", null);}

答案 1 :(得分:0)

错误本身表示&#34; 考虑在没有扩展方法语法的情况下转换动态参数或调用扩展方法。 &#34;

当任何参数属于动态类型时,C#不支持调用扩展方法(Html.RenderAction())。您必须静态调用扩展方法或将参数转换为非动态类型。

在这种情况下,您可以ViewBagString并使用