C#MVC-控制器未从ViewModel表单接收所有数据
我是c#MVC的新手,这是我的第一个项目/测试 我正在使用C#MVC制作一个简单的MVC项目。我的问题是,当我从视图提交表单时,控制器正在接收部分数据,如果我从邮递员处发送相同的帖子,控制器将接收全部数据 这是我的密码: 视图: 控制器: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
[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、用户名)谢谢。你能为用户自己发布这个类吗?我对属性很好奇。@JuanRpublic 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();
}
});
}