如何在using语句中使用ViewBag?

时间:2011-02-19 17:42:00

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

我正在尝试使用ViewBag在部分页面中显示表单的操作。

我尝试了以下内容:

@using(Html.BeginForm(ViewBag.Action, "Person", FormMethod.Post)
@using(Html.BeginForm((ViewBag.Action), "Person", FormMethod.Post)
@using(Html.BeginForm(@(ViewBag.Action), "Person", FormMethod.Post)
@using(Html.BeginForm({ViewBag.Action}, "Person", FormMethod.Post)

但这些都没有奏效。什么是正确的语法?

3 个答案:

答案 0 :(得分:8)

尝试

@using(Html.BeginForm((string)ViewBag.Action, "Person", FormMethod.Post)

答案 1 :(得分:4)

问题是ViewBag的类型为dynamic,因此ViewBag.Action也属于dynamic类型 - 至少,这是编译器认为的类型。

因此将其转换为字符串将为编译器提供缺少的信息。如果它实际上不是一个字符串,那么你会得到一个运行时异常,但至少代码会正确编译:

@using(Html.BeginForm((string)ViewBag.Action, "Person", FormMethod.Post)

答案 2 :(得分:3)

请不要使用此ViewBag / ViewData,因为它们会将您的视图转换为意大利面条。 @Microsoft为什么你介绍过这个概念?当开发人员尝试使用它时,请删除/禁止/抛出ASP.NET MVC v4中的BadCodeException

查看模型是更好/更安全/强类型/避免魔术字符串/重构更友好/只是工作/...:

@using(Html.BeginForm(Model.Action, "Person", FormMethod.Post)
{

}