假设我的模型类看起来像
public class Person
{
[Required]
[MaxLength(50,ErrorMessage="Full name should be within 50 character")]
public string full_name { get; set; }
[Range(18,80)]
[Required(ErrorMessage="Please provide age")]
public Int32 Age { get; set; }
}
我有基于此模型类的表单
@{Html.BeginForm("PostData", "Customodelbinder");
<table>
<tr>
<td>First Name : </td>
<td>@Html.TextBox("first_name")</td>
</tr>
<tr>
<td>Middle Name : </td>
<td>@Html.TextBox("middle_name")</td>
</tr>
<tr>
<td>Surname :</td>
<td> @Html.TextBox("last_name")</td>
</tr>
<tr>
<td>Age:</td>
<td> @Html.TextBox("age") </td>
</tr>
<tr>
<td></td>
<td>
<input type="submit" name="Save" value="Save" />
</td>
</tr>
</table>
}
现在我想知道何时提交表单,然后将调用PostData以及数据将如何从客户端自动发布到Person模型类
public void PostData(Person person)
{
}
我搜索谷歌,发现我们需要使用 ModelBinder 是真的吗?什么时候应该使用 ModelBinder ?
http://www.codeproject.com/Tips/806415/Model-Binding-using-IModelBinder-and-DefaultModelB
不使用 ModelBinder 我们不能将客户端数据发布到操作方法,其中action方法将具有person参数,并且自动客户端人员数据将de-serialize
发送给person class? ?
请帮助我如何使用&amp;没有带有一些示例代码的模型绑定感谢
答案 0 :(得分:0)
我搜索谷歌,发现我们需要使用ModelBinder是真的吗?
部分地,DefaultModelBinder
在大多数情况下都能很好地工作,其中涉及原始甚至复杂类型。因此,在大多数情况下,您不需要考虑编写ModelBinder。我有6-8个控制器和150+动作,不需要写一个活页夹。
when one should use ModelBinder ?
当DefaultModelBinder
无法将您的请求数据绑定到模型中时。例如您正在从具有典型格式,安全密钥,数据等的设备收到请求。DefaultModelBinder
适用于最佳案例匹配,即它会查看您请求参数并尝试在模型中查找确切名称,如果匹配找到了,它会复制模型中的值。
without using ModelBinder can't we post client side data to action method where action method will have person argument and automatically client side person data will be de-serialize to person class ??
当然可以,我们都这样做。使用AJAX post方法。将模型数据传递到ajax请求中的data属性。如果正确命名js模型,数据将完美地绑定到控制器操作参数。 e.g。
var searchResultModel = { searchId: searchId, isSearchEdited: true };
// Get the result view
$.ajax({
url: '@Url.Action("SearchResult", "Search")',
contentType: 'application/json; charset=utf-8',
type: 'POST',
dataType: 'html',
data: JSON.stringify(searchResultModel)
})
.success(function (searchResult) {
$('#contentLoader').html(searchResult);
});