C# ASP.NETMVC不使用专用按钮将值传递给控制器

C# ASP.NETMVC不使用专用按钮将值传递给控制器,c#,asp.net-core,asp.net-core-mvc,C#,Asp.net Core,Asp.net Core Mvc,我试图将ViewModel中的一个值传递给postmethod,它从选择列表中获取两个过滤器(一个用于类型,一个用于难度)以及正在筛选课程的成员的id。成员的id必须传递给HttpPost方法,以便filterByDifficulty方法知道允许成员获得的最大难度 简而言之: 我的get方法创建一个viewmodel。我将viewmodel传递给视图,但是如果不向用户显示某个属性/创建一个单独的按钮,我就不知道如何将该属性从viewmodel传递给post方法 控制器 id参数是我一直坚持的,我

我试图将ViewModel中的一个值传递给postmethod,它从选择列表中获取两个过滤器(一个用于类型,一个用于难度)以及正在筛选课程的成员的id。成员的id必须传递给HttpPost方法,以便filterByDifficulty方法知道允许成员获得的最大难度

简而言之: 我的get方法创建一个viewmodel。我将viewmodel传递给视图,但是如果不向用户显示某个属性/创建一个单独的按钮,我就不知道如何将该属性从viewmodel传递给post方法

控制器
id参数是我一直坚持的,我试图弄清楚如何通过视图将它传递给这个方法

[HttpPost]
public IActionResult LessonsForMember(string filter, string filter2, int id)
        {
            Person person = _personRepository.GetBy(id);
            string Difficulty = person.Difficulty.DifficultyString;
                        PersonLessonModel plm = new PersonLessonModel
            {
                Person = person,
                Types = _lessonRepository.GetTypesLimitedByDifficultyAsSelectList(Difficulty),
                Difficulties = _lessonRepository.GetDifficultiesLimitedByDifficultyAsSelectList(Difficulty),
                Lessons = _lessonRepository.GetFilteredLessons(filter, filter2);
            };
            return View(plm);
         }
查看

我正在尝试将@Model.Person.PersonId放在这里的某个地方,而不向用户显示它。我想把它一直放在底部的过滤器按钮上,但这导致了一个错误

@model Taijitan.Models.ViewModels.PersonLessonModel

<a asp-controller="Lesson" asp-action="Index">Previous</a>
<br />
<form action="/Lesson/LessonsForMember/" method="post">
    <div class="form-inline">
        <select id="Difficulties" name="filter" asp-items="@Model.Difficulties as List<SelectListItem>" class="form-control">
            <option value="">-- All Difficulties --</option>
        </select>

        <select id="Types" name="filter2" asp-items="@Model.Types as List<SelectListItem>" class="form-control">
            <option value="">-- All Types --</option>
        </select>
        //This causes an error
        <button name="id" value="@Model.Person.PersonId" type="submit">Filter</button>
    </div>
</form>
@model Taijitan.Models.ViewModels.PersonLessonModel
以前的

--一切困难-- --所有类型-- //这会导致错误 滤器
您可以将
PersonId
作为隐藏的输入字段添加到表单中,并将其发布到控制器

因此,您需要在表单底部包含以下内容(确保它位于表单内部):

@Html.HiddenFor(m => m.Person.PersonId)