MVC3 и Razor - Как разместить динамическое значение для скрытого поля? - PullRequest
2 голосов
/ 07 ноября 2011

Я новичок в Razor, и иногда я зацикливаюсь на действительно простых вещах.

У меня есть цикл foreach:

@foreach (dynamic item in ViewBag.EAList)
{
<li>
    @using (@Html.BeginForm("Duplicate, "Daily"))
    {
        <p>@item.AuthorComment</p>
        @Html.Hidden("EstadoDeAlmaID", @item.EAID)
        @Html.Hidden("PosterID", Session["id"].ToString())
        <input type="submit" value="Send" />
    }
</li>
}

Эта строка:

@Html.Hidden("EstadoDeAlmaID", @item.EAID)

Не работает, и я не знаю, как заставить это работать,Я пробовал много способов, без @, с (-), с @ (-) ...

Может ли кто-нибудь помочь мне отобразить динамическое значение в моем скрытом поле?Кроме того, если кто-то знает о хороших образцах сайтов Razor, я был бы очень благодарен.

Ответы [ 6 ]

6 голосов
/ 02 июля 2014

У меня была такая же проблема, я обнаружил, что простое приведение решило мою проблему.

@Html.Hidden ("id", (string) ViewBag.ebook.isbn)

4 голосов
/ 07 ноября 2011

В Razor, когда вы находитесь в «C # land», вам больше не нужно ставить префикс значения со знаком @.

Этого должно быть достаточно:

@Html.Hidden("EstadoDeAlmaID", item.EAID)

Ознакомьтесь с Статья Скотта Гу о синтаксисе для получения дополнительной помощи.

Обновление

И я бы также переместил ваш <li></li> в ваш используемый блок, поскольку Razor работает лучше, когда вы оборачиваете блоки HTML внутри блоков кода.

Кроме того, ваш Html.BeginForm должен жить вне вашей петли.

@using (@Html.BeginForm("Duplicate, "Daily"))
{
    <ul>
        @foreach (? item in ViewBag.EAList)
        {
            <li>
                <p>@item.AuthorComment</p>
                @Html.Hidden("EstadoDeAlmaID", item.EAID)
                @Html.Hidden("PosterID", Session["id"].ToString())
                <input type="submit" value="Send" />
            </li>
        }
    </ul>
}

Где ? в цикле foreach - это тип ваших элементов в EAList.

2 голосов
/ 07 ноября 2011

Во избежание исключения методы расширения не могут быть динамически отправлены , используйте модель вместо ViewBag, поэтому вы не будете использовать dynamic объекты (это позволит избежать всех ненужных приведений в представлении и больше соответствует стилю MVC в целом):

В вашем действии при возврате представления:

return View("ViewName", db.EAList.ToList());

По вашему мнению, первая строка должна быть:

@model IEnumerable<EAListItem> //or whatever the type name is

Тогда просто сделайте:

@foreach(var item in Model)
1 голос
/ 07 ноября 2011

Вы получили ошибку: «методы расширения не могут быть динамически отправлены» ... в этом ваша проблема.

Вы должны объявить переменную цикла не как динамический, а как фактический тип вколлекция.Затем удалите @ из вызова item.EAID внутри вызова @ Html.Hidden ().

0 голосов
/ 07 июля 2015

Я обнаружил, что когда я хочу использовать данные о сумке вида в HTML, возвращение к основам часто работает для меня

<input type="hidden" name="Data" id="Data" value="@ViewBag.Data" />

, это дает тот же результат.

0 голосов
/ 11 апреля 2013

Простым решением для меня было использование ViewData вместо ViewBag. В любом случае ViewBag - это просто динамическая оболочка вокруг ViewData.

@Html.Hidden("ReportID", ViewData["ReportID"])

но я не знаю, поможет ли это в вашем случае или нет, так как вы создаете динамические элементы в цикле foreach.

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