我需要将表单中下拉列表中的值发布到 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,因此它执行默认索引
我尝试了不同的下拉列表形式,从手动...我写什么是什么,到我目前拥有的。
有人知道我做错了什么吗?
如果您想将 SortsMethods 的值 POST 到控制器,那么最好的选择是编写一个接受 POST 操作的端点:
[HttpPost]
public ViewResult Index(SortTypeModel viewModel)
{
viewModel.SortsMethods....
我还强烈建议您初始化 GET 端点中的选择列表,并使用成熟的视图模型将该数据传递到视图。
希望这足以让您继续前进。