Как использовать ViewBag в операторе использования? - PullRequest
1 голос
/ 19 февраля 2011

Я пытаюсь использовать 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 ]

8 голосов
/ 19 февраля 2011

Попробуйте

@using(Html.BeginForm((string)ViewBag.Action, "Person", FormMethod.Post)
4 голосов
/ 19 февраля 2011

Проблема в том, что ViewBag имеет тип dynamic, поэтому ViewBag.Action также имеет тип dynamic - по крайней мере, так считает компилятор.

Итак, приведениеэто строка предоставит недостающую информацию компилятору.Если это на самом деле не строка, вы получите исключение времени выполнения, но по крайней мере код скомпилируется правильно:

@using(Html.BeginForm((string)ViewBag.Action, "Person", FormMethod.Post)
3 голосов
/ 19 февраля 2011

Пожалуйста, не используйте этот ViewBag / ViewData, так как они превращают ваши взгляды в спагетти. @ Microsoft, почему ты вообще ввел это понятие? Удалите / запретите / добавьте BadCodeException в ASP.NET MVC v4, когда разработчик пытается его использовать.

Просмотр моделей намного лучше / безопаснее / строго типизирован / избегает волшебных строк / реорганизуется удобнее / просто работает /...:

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

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...