如何使用下拉列表 asp.net core 5 MVC 将数据从视图发送到控制器

How to send data from view to controller with drop down list asp.net core 5 MVC

所以我在 asp.net 核心中做一个项目,我有多个下拉列表,一旦我单击提交按钮,它们应该将数据发送到控制器。问题是我一直无法向控制器发送任何数据。

这是视图的相关部分(现在只有一个下拉列表,但我会添加更多):

@using DemoProjectCar.Models
@model JoinModels

<form asp-action="searchCar">
    <label for="carType">car Type:</label>
    <select name="carType" id="carType">
        <option value="Aucun" name="data">Aucun</option>
        @foreach (var car in Model.cars)
        {
            <option name="data">@Html.DisplayFor(modelItem => car.carType)</option>
        }
    </select>

    <div class="form-group">
        <input id="SearchButton" type="submit" value="search" class="btn btn-dark" />
    </div>
</form>

这是控制器:

public IActionResult searchCar(String data)
    {
        //Gets a list of both models in the view
        JoinModels join = getJoinModel();
        
        //Whatever i wanna do with the data
        
        return View("Index", join);
    }

这是 Join 模型和 carModel

namespace DemoProjectCar.Models
{
public class JoinModels
{
    public List<_user> user { get; set; }
    public List<_cars> cars { get; set; }
}
}

namespace DemoProjectCar.Models
{
public class _cars
{
    public int id { get; set; }
    public String carType{ get; set; }

    public cars()
    {

    }
}
}

我知道类似的东西通常会起作用(我认为):

<select asp-for="id" asp-items="@(new SelectList(ViewBag.message,"id","carType"))">

但是因为我有一个连接模型,所以它不起作用

在您的 HTML 中试试这个:

<select asp-for="data" asp-items="@(new SelectList(Model.cars, "id", "carType"))"></select>

并且在您的 ViewModel(JoinModels) 中,您需要创建一个属性以发送到您的 Post 方法:

public class JoinModels
{
    // New attribute to receive in your post data
    public string data { get; set; }

    public List<_user> user { get; set; }
    public List<_cars> cars { get; set; }
}

然后在您的 post 方法中 searchCar(String data),您将收到选定的 ID。

这里有一个 link 可以帮助您更多:Examples about how to create an dropdopwn