我已经阅读了与此主题相关的几个问题,并提供了一个有效的解决方案,但我不知道它是如何工作的,这似乎是错误的。 Angular的新手需要一些建议。将数据从Angular视图模型发布到C#MVC / .net 4.5控制器。
发布的角度方法
$scope.UpdateData = function () {
$http({
method: 'POST',
url: '/Certification/Configuration/' + certId + '/DisplayCategory/Update',
data: $scope.viewModel,
headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
}).
success(function (response) {
alert("success");
}).
error(function (response) {
alert("sbf !!!");
});
}
这是C#控制器中的方法
public JsonResult Update(FormCollection collection)
{
string postedValue = Request.Form[0].ToString();
DisplayCategoriesViewModel displayCategories;
JavaScriptSerializer jss = new JavaScriptSerializer();
displayCategories = jss.Deserialize<DisplayCategoriesViewModel>(postedValue);
JsonResult jr = new JsonResult();
jr.Data = "Is SF or UF";
return (jr);
}
有更好的方法吗?神奇的数字Request.Form [0]似乎错了。我试过用json.stringify从浏览器发布viewModel,但只是得到null。
任何想法,建议?
更新 - 对于那些感兴趣的人是工作代码
角度控制器
$scope.UpdateData = function () {
$http({
method: 'POST',
url: '/Certification/Configuration/' + certId + '/DisplayCategory/Update',
data: JSON.stringify($scope.viewModel)
}).
success(function (response) {
alert("success");
}).
error(function (response) {
alert("sbf !!!");
});
}
C#Controller
public JsonResult Update(DisplayCategoriesViewModel viewModel)
{
//Do stuff here
JsonResult jr = new JsonResult();
jr.Data = "Is SF or UF";
return (jr);
}
答案 0 :(得分:2)
是的,有更好的方法。
在C#Web项目中,您需要添加模型类来代替表单集合。所以假设你的viewmodel是一辆汽车,你可能想创建一个这样的类:
public class CarViewModel {
public string Make { get; set; }
public string Model { get; set; }
}
您需要确保属性名称与角度视图模型中使用的属性名称相匹配。
然后,您将从以下位置更改控制器操作签名:
public JsonResult Update(FormCollection collection)
要:
public JsonResult Update(CarViewModel viewModel)
进入后,您可以直接访问所有属性。