我正在尝试使用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)
但这些都没有奏效。什么是正确的语法?
答案 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)
{
}