Скажите view, чтобы использовать другую строку для определенного свойства в модели

У меня есть следующие классы:

public class ViewModel
{
    public List<Dog> Dogs { get; set; }
}

public class Dog
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Type { get; set; }
    public string SuperPowers { get; set; }
}

Предположим, у меня есть следующий вид:

@model ViewModel
@for(int i = 0; i < Model.Dogs.Count(); i++)
{
    <div class="dog">
        @Html.HiddenFor(m => m.Dogs[i].Id)
        <div>Dog name: @Model.Dogs[i].Name</div>
        <div>Dog type: @Model.Dogs[i].Type</div>
        <div>Dog super powers : @Model.Dogs[i].SuperPowers</div>
    </div>
}

Вопрос: Как я могу указать, чтобы использовать string "d" за Dog класс, чтобы вывод html выглядел так:

<div class="dog">
    <input type="hidden" id="d_0__Id" name="d[0].Id" value="1" />
    <div>Dog name: Boby</div>
    <div>Dog type: Turbo</div>
    <div>Dog super powers : Extra speed</div>
</div>

<div class="dog">
    <input type="hidden" id="d_1__Id" name="d[1].Id" value="2" />
    <div>Dog name: Lasy</div>
    <div>Dog type: Powered</div>
    <div>Dog super powers : Extra strength</div>
</div>

Обратите внимание, что вход имеет имя d[1].Id

вместо Dogs[1].Id

Я знаю, что смогу позже написать собственный механизм связывания моделей для работы с таким выводом html, но было бы здорово, если бы мне это не нужно.

ВАЖНЫЙ

Я ищу решение, которое позволит мне продолжать использовать @Html.HiddenFor(...) скорее, чем @Html.Hidden(...) потому что я ненавижу магические струны. Я бы приветствовал решение еще больше, если бы оно не включало написание пользовательского связующего для модели, чтобы затем интерпретировать новую HTML-разметку в модели.

В идеальном случае это был бы какой-то атрибут, который я бы дал своему классу. Пример: [BindClassNameTo(Name="d")]

1 ответ

Ты можешь использовать Html.Hidden(string.format("d[{0}]", i), Model.Dogs[i])

Другие вопросы по тегам