[英]ASP.Net MVC model binding to javascript
问题非常简单:我使用@Html.EditorForModel()
为模型生成字段。 然后用户填写所有这些字段,我想通过AJAX
发送此字段,因为我应该做几台服务器的服务而无需重新加载页面。
我搜索了几种方法,但是似乎没有标准的方法可以做这些事情。 我的意思是我在客户端没有代表模型的对象。 我发现一个单独的库调用JSModel
( link ),但似乎不起作用。 我现在的代码是:
@model Student
<script src="@Url.Content("~/scripts/jquery-1.12.2.min.js")" type="text/javascript" async="async"></script>
<script src="@Url.Content("~/scripts/Requester.js")" type="text/javascript" async="async"></script>
<script src="@Url.Content("~/scripts/jsmodel.js")" type="text/javascript"></script>
<script type="text/javascript">
var requester = new Requester(@Html.Raw(Json.Encode(new Student())));
function SendSignupRequest() {
requester.SendSignupRequest();
}
</script>
<h2>Student</h2>
<div>
@Html.EditorForModel()
</div>
<input type="button" value="Send" onclick="SendSignupRequest()"/>
Requester.js:
function Requester(rawModel) {
this.modelObj = new JSModel(rawModel);
this.SendSignupRequest = function() {
var model = modelObj.refresh();
var val = model.prop("Name");
alert(val);
}
}
是否有任何简单的方法可以在JSON中序列化模型对象并将其发送到服务器,而无需手动构造具有数百万document.getElementById
的对象?
您可以使用jQuery将表单序列化为JSON对象:
var data = $('form').serialize();
(当然,这意味着将您的表单元素包装在一个form
,这确实应该发生。)
然后只需在POST请求中将该data
对象传递到服务器即可。 像这样简单:
$.post('some/url', data, function(response) {
// success callback
});
无需手动构造具有数百万个document.getElementById的对象
请注意,如果您的对象具有数百万个字段,那么您很可能在这里遇到其他问题。
视图
@using (Html.BeginForm("action", "controller", FormMethod.Post, new { @class = "form-horizontal form-compact ", role = "form", id = "form1" }))
{
}
Java脚本
var formdata = $("#form1").serializeArray();
$.ajax({
url: url,
type: 'POST',
data: formdata,
success: function (data) {
}
控制者
public ActionResult action(Model model)
{
//access data here
}
Yes you can use form serialize using Jquery
var formData = $('#form').serializeObject();
$.extend(formData, { Contacts : myContacts});
$.extend(formData, { Address : myAddress});
var result = JSON.stringify(formData);
$('#formHiddenField').val(result);
then submit form using:
$.ajax(
url: @Url.Action("post url")
data: myForm.serialize(),
dataType: 'json',
type: 'POST',
success: function(){
})
为什么不使用Ajax.BeginForm()
? 我相信模型绑定会自动工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.