发布到MVC控制器,ViewModel保持为空

时间:2016-04-18 08:52:18

标签: asp.net angularjs asp.net-mvc

我有这个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对象识别为视图模型?

2 个答案:

答案 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) {
}