我有这个ASP.NET MVC控制器动作和viewmodel:
public JsonResult Upload(UploadModel MyModel)
{
//do stuff with MyModel
}
public class UploadModel
{
public string Name;
}
在Angular中,一种向此操作提交表单的方法:
function onSubmit() {
console.log(vm.model);
$http.post('/Home/Upload', vm.model).
then(function (response)
{
// do stuff with response
});
};
当我记录vm.model时,它看起来像这样:
{ Name : "Some cool name" }
在请求有效负载中看起来完全相同。但是当我将此对象发布到Upload方法时,Name似乎为null。但是,当我将Upload方法更改为仅接受字符串而不是viewmodel:
时public JsonResult Upload(String Name)
{
//do stuff with Name
}
并将完全相同的对象发布到它,它确实被识别。
发生了什么事?为什么MVC不将我的JS对象识别为视图模型?
答案 0 :(得分:3)
Name
是一个字段,而不是一个属性(没有getter / setter),因此DefaultModelBinder
无法设置该值。将其更改为
public class UploadModel
{
public string Name { get; set; }
}
答案 1 :(得分:0)
您应该序列化表单数据,然后发布
var cpformdata = $("#Myform form").serializeArray();
$.ajax({
url: url,
type: 'POST',
data: cpformdata,
success: function (data) {
}