我的 POST Controller 无法捕获我设置的 ViewModel 参数,我很困惑,因为我有一组不同的 POST Controller ,它可以捕获 ViewModel 参数。
我的代码如下所示,
查看页面
@model MyProject.Web.ViewModels.MyViewModel
@{
ViewBag.Title = "Home";
ViewBag.Description = "My Project";
ViewBag.SubDescription = "My Project Tool";
Layout = null;
}
@using (Html.BeginForm())
{
@Html.TextBoxFor(m => m.Filter)
<input type="submit" class="btn btn-primary btn-inline-right input-tab" value="Search" />
}
Controller
using MyProject.Web.ViewModels;
[HttpGet]
[Route("Home/Index")]
public async Task<ActionResult> Index()
{
...await API integration code here...
return View(MyViewModel);
}
[HttpPost]
[Route("Home/Index/{viewmodel}")]
public ActionResult Index(MyViewModel viewmodel) <-- all properties of viewmodel are NULL
{
return View();
}
查看模型
using MyProject.Web.Models;
using System.Collections.Generic;
namespace MyProject.Web.ViewModels
{
public class MyViewModel
{
public User UserInfo;
public List<Client> Clients;
public string Filter;
}
}
我觉得这是一个很小的错误,可能是因为忽略太多了。希望有人可以看看并提供帮助。
最佳答案
问题在于您在 Post
顶部定义的路线行动[Route("Home/Index/{viewmodel}")]
你不需要那个{viewmodel}
在该 URL 中,因为您没有在查询字符串中发布任何内容,所以您在 HTTP Post 的正文中发布了一个复杂的对象。
删除 route
它应该可以工作。
此外,ASP.NET mvc 根据 name
将输入映射到模型属性。它们的属性如 <input name="abc">
会将此输入映射到名为 abc
的属性在 ViewModel 上或只是一个参数。在你的情况下@Html.TextBoxFor(m => m.Filter)
自动执行此操作。
希望这有帮助。
关于c# - POST Controller 操作方法具有 NULL ViewModel 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55605762/