C#MVC-控制器未从ViewModel表单接收所有数据

C#MVC-控制器未从ViewModel表单接收所有数据,c#,model-view-controller,C#,Model View Controller,我是c#MVC的新手,这是我的第一个项目/测试 我正在使用C#MVC制作一个简单的MVC项目。我的问题是,当我从视图提交表单时,控制器正在接收部分数据,如果我从邮递员处发送相同的帖子,控制器将接收全部数据 这是我的密码: 视图: 控制器: [HttpPost, ValidateAntiForgeryToken] public IActionResult NewTask([FromBody] CreateTaskViewModel TaskVM) { var ite

我是c#MVC的新手,这是我的第一个项目/测试

我正在使用C#MVC制作一个简单的MVC项目。我的问题是,当我从视图提交表单时,控制器正在接收部分数据,如果我从邮递员处发送相同的帖子,控制器将接收全部数据

这是我的密码:

视图:

控制器:

[HttpPost, ValidateAntiForgeryToken]
    public IActionResult NewTask([FromBody] CreateTaskViewModel TaskVM)
    {
        var item = new Models.Task
        {
            Title = TaskVM.Title,
            Description = TaskVM.Description,
            Status = TaskVM.Status
        };

        var users = _userRepository.Find(Convert.ToInt32(TaskVM.User));

        if (item == null)
        {
            return NotFound();
        }

        _taskRepository.NewTask(item);

        var userTask = new UserTask
        {
            Status = "A",
            UserId = users.Id,
            TaskId = item.Id
        };
        _userTaskRepository.NewUserTask(userTask);
        return View("Tasks");
    }
提交表单时,我在
var item=new Models.Task
行添加了一个断点,TaskVM对象具有字段Title、Description和Status的所有值,但用户值为空

如果我在浏览器的Inspect选项中捕获请求并从Postman发送,它将非常有效

我需要在视图或控制器中更改什么

编辑: 这是生成的HTML:

<form class="form-horizontal" name="NewTask" action="/Task" method="post">
<div class="table">
    <dl>
        <dt>
            Title:
        </dt>
        <dd>
            <input class="form-control" name="Title" id="Title" type="text" placeholder="Title" />
        </dd>
        <dt>
            Description:
        </dt>
        <dd>
            <input class="form-control" name="Description" id="Description" type="text" placeholder="Description" />
        </dd>
        <dd>
            <input type="hidden" name="Status" id="Status" value="A" />
        </dd>
        <dt>
            User:
        </dt>
        <dd>
            <select class="form-control" data-val="true" data-val-required="The User field is required." id="User" name="User"><option value="">Please Select One...</option>
                <option value="1">User 1</option>
                <option value="2">User 2</option>
                <option value="3">User 3</option>
                <option value="">etc...</option>
            </select>                                
        </dd>
    </dl>
</div>
<div class="modal-footer">
    <a href="#" class="btn" data-dismiss="modal">Close</a>
    <input type="submit" class="btn btn-primary" id="btnSubmit" />
</div>
<input name="__RequestVerificationToken" type="hidden" value="dQhqzqtPv5jtvF4dmgleh4HqwmIa6w9ancJdYGLWKKWmnnkZS-IjSh9NFSUDeSPsfr9vNHiro1i4a4" />

标题:
说明:
用户:
请选择一个。。。
用户1
用户2
用户3
等

我使用JSon/JQuery将表单发布到我的控制器

$("#btnSubmit").click(function () {
    submitForm();
});

function submitForm() {
    Task = new Object();
    Task.Title = $("#Title").val();
    Task.Description = $("#Description").val();
    Task.Status = $("#Status").val();
    Task.UserId = $("#UserId").find(":selected").val();
    newTask(Task);
}

function newTask(Task) {
    var s = JSON.parse(JSON.stringify(Task))
    $.ajax({
        url: "http://url:port/Task",
        type: 'POST',
        headers: {
            Accept: 'application/json',
            'Content-Type': 'application/json',
        },
        datatype: 'json',            
        data: JSON.stringify(s),
        success: function (data) {
            location.reload();
        },
        error: function (request, message, error) {
            location.reload();               
        }
    });
}

请发布生成的HTML以及填充
ViewBag的类型定义。用户
@JuanR I编辑问题并发布生成的HTML。ViewBag.Users返回用户列表(Id、用户名)谢谢。你能为用户自己发布这个类吗?我对属性很好奇。@JuanR
public int Id{get;set;}
public string Username{get;set;}
类的名称是什么???
<form class="form-horizontal" name="NewTask" action="/Task" method="post">
<div class="table">
    <dl>
        <dt>
            Title:
        </dt>
        <dd>
            <input class="form-control" name="Title" id="Title" type="text" placeholder="Title" />
        </dd>
        <dt>
            Description:
        </dt>
        <dd>
            <input class="form-control" name="Description" id="Description" type="text" placeholder="Description" />
        </dd>
        <dd>
            <input type="hidden" name="Status" id="Status" value="A" />
        </dd>
        <dt>
            User:
        </dt>
        <dd>
            <select class="form-control" data-val="true" data-val-required="The User field is required." id="User" name="User"><option value="">Please Select One...</option>
                <option value="1">User 1</option>
                <option value="2">User 2</option>
                <option value="3">User 3</option>
                <option value="">etc...</option>
            </select>                                
        </dd>
    </dl>
</div>
<div class="modal-footer">
    <a href="#" class="btn" data-dismiss="modal">Close</a>
    <input type="submit" class="btn btn-primary" id="btnSubmit" />
</div>
<input name="__RequestVerificationToken" type="hidden" value="dQhqzqtPv5jtvF4dmgleh4HqwmIa6w9ancJdYGLWKKWmnnkZS-IjSh9NFSUDeSPsfr9vNHiro1i4a4" />
$("#btnSubmit").click(function () {
    submitForm();
});

function submitForm() {
    Task = new Object();
    Task.Title = $("#Title").val();
    Task.Description = $("#Description").val();
    Task.Status = $("#Status").val();
    Task.UserId = $("#UserId").find(":selected").val();
    newTask(Task);
}

function newTask(Task) {
    var s = JSON.parse(JSON.stringify(Task))
    $.ajax({
        url: "http://url:port/Task",
        type: 'POST',
        headers: {
            Accept: 'application/json',
            'Content-Type': 'application/json',
        },
        datatype: 'json',            
        data: JSON.stringify(s),
        success: function (data) {
            location.reload();
        },
        error: function (request, message, error) {
            location.reload();               
        }
    });
}