当显式定义控制器参数时,默认模型绑定器会发生异常
Default model binder freaks out when explicitly defining controller parameter
我正试图弄清楚MVC3中的模型绑定。看看这个例子。
这是控制器代码:
public ActionResult Index()
{
Person person = new Person{ Name = "Test" };
return View(person);
}
[HttpPost]
public string Edit(Person personModel)
{
return string.Format("From server: {0}", personModel.Name);
}
这是html/javascript位:
@model MCV3.Test.Models.Person
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript">
$(document).ready(function (){
var model = @Html.Raw(Json.Encode(Model));
$.ajax({
url : "/Person/Edit",
type: "Post",
datatype: "json",
data : model,
success: function (data) {
$("#result").text(data);
}
});
});
</script>
</head>
<body>
<label id="result"></label>
</body>
</html>
上面的代码有效,但如果我将ajax调用的数据设置更改为:
$.ajax({
url : "/Person/Edit",
type: "Post",
datatype: "json",
data : {personModel : model},
success: function (data) {
$("#result").text(data);
}
});
它不再起作用:模型的类型正确,但name属性为null。
在有效的示例中,post参数为:
Name Test
Name=Test
但在不起作用的例子中,它们是:
personModel[Name] Test
personModel%5BName%5D=Test
如果请求看起来像这样,MVC似乎无法序列化:personModel[Name] Test
有没有什么方法可以在不编写自定义活页夹的情况下解决这个问题?
MVC绑定尝试创建并填充Person
对象以传递给Edit
操作时,它会尝试查找Person
对象上所有可设置属性的值;在这种情况下是CCD_ 5属性。因此,它在表单数据、查询字符串数据等中查找关键字为"name"的名称-值对。你的工作榜样有一个,而你的非工作榜样没有。
如果你想以这种格式发布数据,你可以创建一个自定义的ValueProvider
,它解析数据并根据它的发现返回值。
相关文章:
- 在VanillaJS中模拟模型双向数据绑定
- 有没有比在app.js上绑定模块名称更好的方法来动态加载视图模型和视图以显示模态
- Backbone.js将模型绑定到视图时出错
- Angularjs无法将单选按钮与嵌套范围内的模型绑定
- 当显式定义控制器参数时,默认模型绑定器会发生异常
- Ember.js:通过绑定/模型查找DOM元素
- AngularJS绑定模型以选择更新输入数字字段,最小值为最大值
- 淘汰MVC,绑定模型&将对象添加到模型中
- 从ajax中为传递为null的日期值绑定模型
- Ember.js 不会自动绑定模型 REST 更改
- 骨干JS,绑定模型查看
- 如何在角度指令中绑定模型
- Ember.js绑定模型存储在数组中
- 在javascript函数中绑定模型并将其传递给控制器
- 当浏览器填充表单时,AngularJS没有绑定模型
- Angularjs:当模型改变时,单选按钮检查状态绑定模型值失败
- 绑定模型在EmberJS中变为视图
- angularjs - ng-file-upload不绑定模型到动态创建的HTML表单
- 剑道自动完成不会绑定模型
- Emberjs:正确绑定模型/控制器/视图与夹具数据