2016-03-28 151 views
1

这个问题很简单:我使用@Html.EditorForModel()为我的模型生成字段。然后用户填写所有这些字段,我想通过AJAX发送该字段,因为我应该在不重新加载页面的情况下执行多个服务器的服务。ASP.Net MVC模型绑定到javascript

我搜索了几种方法,但似乎没有标准的方法来做这样的事情。我的意思是我没有代表模型的客户端对象。我发现一个库叫JSModellink),但它似乎不起作用。我现在的代码是:

@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

+0

看到这个SO问题:http://stackoverflow.com/questions/16717715/model-binding-with-jquery-ajax-serialize-not-working – cl3m

回答

3

查看

@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 
} 
+0

感谢您的回答,它是最适合我的情况。加密的代码可以在这个URL中找到(http://stackoverflow.com/questions/5410055/using-ajax-beginform-with-asp-net-mvc-3-razor)。 –

1
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(){ 
    }) 
3

可以序列的形式,以一个JSON对象使用jQuery:

var data = $('form').serialize(); 

(这当然意味着一个form,这确实应该反正发生包裹你的表单元素。)

然后只需将该对象data传递给POST请求中的服务器。事情就这么简单:

$.post('some/url', data, function(response) { 
    // success callback 
}); 

,而无需手动构造一个对象以百万计的document.getElementById的

需要注意的是,如果你的对象有百万领域的那么你很可能会遇到其他问题在这里。

1

为什么不Ajax.BeginForm()你的目的。我相信模型绑定会自动工作。