我将数据从angularJS发送到MVC控制器(我看到angularJS函数具有参数值,但在MVC控制器端,值为null ,我没有线索为什么会这样......)
//在angularJS控制器中运行
//initialize model
var model = {};
model.Name = "some string";
save(model, onSaveSuccess, onSaveError);
...
//post to MVC controller...
function save(model, success, error) {
//name **has** value!
return $http.post('/Test/Save', { params: { model: model } })
.success(function (data) { errorHandler.jsonError(data, success, error); })
.error(function (data, status) { errorHandler.httpError(data, status, error); });
}
// MVC控制器端(TestController)
[HttpPost]
public JsonResult Save(SaveModel model) //SaveModel is a class that has Name property of type string
{
//when debug reaches -> name is null...
//...
}
在该解决方案中,还有其他情况下,数据以类似的方式保存,并且在那里工作......任何想法要检查什么,或者可能出错?我是angularjs的新手,也许我错过了一些非常简单的东西......
P.S。
1)如果我改变" params:"到"数据:"建议的结果是相同的
2)如果我删除" params:"然后我得到500 error
。即更改:
{ params: { model: model } }
- > { model: model }
问题/解决方案
所以,问题结果是 客户端和服务器端
1)在客户端我必须更改{ params: { model: model } }
- > model
StriplingWarrior
2)在服务器端,我的model
继承自BaseModel
,它在其构建器中设置了一些与本地化相关的内容......并且它在我的机器上失败了。问题在于,当调试MVC控制器时 - >这个BaseClass
代码在它之前执行过,所以它对我来说是隐藏的。我还不熟悉浏览器Developer Tools
,所以我没有在正确的地方寻找信息 - >当我转到Network
标签(Chrome Developer tools
)时,我可以获得服务电话的异常信息。
Here is a similar case answered on SO. I seem to follow same rules without success
答案 0 :(得分:2)
post的第二个参数是您要发布的实际数据有效负载,因此您需要删除params
属性并将其对象提升到顶层。
function save(name, success, error) {
//name **has** value!
return $http.post('/Test/Save', { name: name })
.success(function (data) { errorHandler.jsonError(data, success, error); })
.error(function (data, status) { errorHandler.httpError(data, status, error); });
}
根据您更新的代码,您应该直接将模型作为请求的正文传递:
function save(model, success, error) {
//name **has** value!
return $http.post('/Test/Save', model)
.success(function (data) { errorHandler.jsonError(data, success, error); })
.error(function (data, status) { errorHandler.httpError(data, status, error); });
}
答案 1 :(得分:-1)
我几乎100%确定你需要在你的JSON.stringify()
对象上使用name
方法,因为直接传递它就不会把你的字符串放在撇号中,这是MVC需要处理的此值为字符串对象。
请查看浏览器在Developer tools'
网卡中确切发送的内容,以确认我的理论。
答案 2 :(得分:-1)
我不确定它是否有效,但您可以尝试更改此
public JsonResult Save(string name)
要
public JsonResult Save([FromBody]string name)
当参数名称不为空时,您可以检查它的值并相应地改变角度部分