c# - POST Controller 操作方法具有 NULL ViewModel 参数

标签 c# asp.net .net asp.net-mvc

我的 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/

相关文章:

c# - 将(长尾数)和(sbyte 指数)转换为十进制

asp.net - 大型 Web 应用程序中的 HTTP Keep Alive

javascript - AngularJS 添加新项目并从列表中删除现有项目

c# - .NET Xml 序列化 : Integer Element with Attribute?

c# - 返回两个值,元组 vs 'out' vs 'struct'

c# - 正则表达式 C# 按精确顺序匹配两个单词的字符串并返回不匹配单词的捕获

c# - 上传大量用户的大文件的最佳方式是什么?

asp.net - 获取 Controller 中隐藏字段的值 (ASP.NET MVC)

.net - 这是哪种 .NET 查询语言?

c# - 恢复最小化窗口前要求输入密码