无法在 ASP.NET Core MVC 中将值从视图 POST 到控制器

问题描述 投票:0回答:1

我需要将表单中下拉列表中的值发布到我的

HomeController

这是视图:

@{
    
List<SelectListItem> listItems= new List<SelectListItem>();
listItems.Add(new SelectListItem
    {
      Text = "Title",
      Value = "@SortsMethods.Title",
    });
listItems.Add(new SelectListItem
    {
        Text = "DeadLineDate",
        Value = "@SortsMethods.DeadLineDate",
    });
listItems.Add(new SelectListItem
    {
        Text = "IsComplete",
        Value = "@SortsMethods.IsComplete"
    });
}

<form asp-controller="Home" asp-action="Index">
    
    <select asp-for="SortsMethods" asp-items="listItems">
    </select>
    
    <input type="submit" >
</form>

这是

HomeController

public readonly ITasksCommands _tasksCommands;
private readonly TasksDbContext _tasksDbContext;

public HomeController(ITasksCommands tasksCommands, TasksDbContext tasksDbContext)
{
    _tasksCommands = tasksCommands;
    _tasksDbContext = tasksDbContext;
}    

[Route("/")]
public async Task<ViewResult> Index()
{
    return View(new SortTypeModel()
    {
        Tasks = await _tasksCommands.GetTasks().ToListAsync(),
        SortsMethods = SortsMethods.Title
    });
}

[HttpGet]
public async Task<SortTypeModel> Index(SortsMethods sortsMethods)
{
    var obj = _tasksCommands.GetTasks();
    switch (sortsMethods)
    {
        case SortsMethods.Title:
            obj = obj.OrderByDescending(x => x.Title);
            break;
        case SortsMethods.DeadLineDate:
            obj = obj.OrderByDescending(x => x.DeadlineDate);
            break;
        case SortsMethods.IsComplete:
            obj = obj.OrderByDescending(x => x.IsCompleted);
            break;
    }
    return new SortTypeModel()
    {
        Tasks = await obj.ToListAsync(),
        SortsMethods = SortsMethods.Title
    };
}

这些是模型类:

namespace TasksApplication.Domain;

public class Tasks 
{
    [Required]
    public Guid Id { get; set; }
    public string Title { get; set; }
    public string Details { get; set; }
    public bool IsCompleted { get; set; }
    public DateTime DeadlineDate { get; set; }
}

namespace WebApplication1.Models;

public class SortTypeModel 
{
    public SortsMethods SortsMethods { get; set; }

    public List<Tasks> Tasks { get; set; }

}

namespace TasksApplication.Application.Enum;

public enum SortsMethods
{
    Title, 
    DeadLineDate,
    IsComplete
}

我的问题是控制器没有收到

sortsMethods
,因此它执行默认的索引。

我尝试了不同的下拉列表形式,从手动

<select><option>...
我写什么是什么,到我目前拥有的。

有人知道我做错了什么吗?

c# asp.net-core-mvc http-post
1个回答
1
投票

如果您想将 SortsMethods 的值 POST 到控制器,那么最好的选择是编写一个接受 POST 操作的端点:

[HttpPost]
public ViewResult Index(SortTypeModel viewModel)
{
   viewModel.SortsMethods....

我还强烈建议您初始化 GET 端点中的选择列表,并使用视图模型将该数据传递到视图。

希望这足以让您继续前进。

© www.soinside.com 2019 - 2024. All rights reserved.