Передача id объекта View в метод контроллера ASP.NET MVC

183
17 декабря 2018, 16:10

Есть БД с перечнем кандидатов, с помощью EF создал DbContext -

VoterContext VC = new VoterContext();

из которого вытягиваю данные в представление

public ActionResult Candidats()
    {
        IEnumerable<Candidat> candidats = VC.candidats;
        ViewBag.Candidat = candidats;
        return View();
    }

В представлении данные из БД транслируются с помощь цикла @foreach

@foreach (var b in ViewBag.Candidat)
    {
        <tr>                
            <td><p>@b.CandidatInfo</p></td>
            <td><p>@b.CandidatPartion</p></td>
            <td><p>@b.CandidatProgramm</p></td>
            <td><p><a href="/Home/Vote/@b.CandidatId">Проголосовать</a></p></td>
        </tr>
    }

В цикле есть переход к методу

<a href="/Home/Vote/@b.CandidatId">Проголосовать</a>

Вопрос: Как создать метод в контроллере, который при нажатии на кнопку транслировал бы только те данные из выборки @foreach, которую выбрал пользователь? То есть - в синтаксис Razor вместо @b. поместить CandidatId указанного кандидата?

Прошу прощения за не точности в вопросе, из за этой "чудо-технологии" сплошная каша в голове.

Answer 1

Есть метод в контроллере, который выводит перечень данных в компонент View с помощью @foreach цикла.

Нет, это не метод и не в контроллере, это кусок кода из вьюхи.

ActionResult Vote(string id)
{
    достать данные из бд по id
    return View(данные)
}

Вообще, как-то размыто написано, уточните ваш вопрос.

Answer 2

Я бы вам советовал по Модели организовать View (строго типизированно)

@foreach (var b in Model)
{
    <tr>                
        <td><p>@b.CandidatInfo</p></td>
        <td><p>@b.CandidatPartion</p></td>
        <td><p>@b.CandidatProgramm</p></td>
        <td><p>@Html.ActionLink("Проголосовать", "Vote", "Home", new { id = @b.CandidatId, info= @b.CandidatInfo, data = @b.CandidatPartion }, null</p></td>
    </tr>
}

Вы должны именно по "id" отправлять потому что маршрутизация по умолчанию у вас такая

routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );

А далее вы эти "id, info, data" получаете в Controller - Home, в методе Vote

public ActionResult Vote(int? id, string info, string data)
{
    // Something
    return View()
}

Если я конечно правильно всё понял

READ ALSO
Запуск Тестов на нескольких браузерах Selenium + NUnit

Запуск Тестов на нескольких браузерах Selenium + NUnit

учусь писать автотесты, стал вопрос как запустить параллельное выполнение тестов на нескольких браузерах(допустим на 4х), если использовать...

168
Ошибка запуска Is not a valid Win32 application

Ошибка запуска Is not a valid Win32 application

Есть виртуалка на базе Vmware с Windows 7В ней прикручена папка с основной машины как сетевой диск по адресу Z:\Work\Program\Test\Test

176
Типовой объект (эталон)

Типовой объект (эталон)

Не смог сформулировать заголовок, попробую объяснитьПо сети получаю данные, среди данный есть id устройства

220
Зачем нужен const, если можно не менять int

Зачем нужен const, если можно не менять int

Не понимаю, зачем во многих языках используется тип данных const, если можно создать int и не менять его? Прошу объяснить и привести пример

229