无法在 ASP.NET MVC Core 中将值从视图 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,因此它执行默认索引

我尝试了不同的下拉列表形式,从手动...我写什么是什么,到我目前拥有的。

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

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

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

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

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

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

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