繁体   English   中英

ASP.Net MVC模型绑定到javascript

[英]ASP.Net MVC model binding to javascript

问题非常简单:我使用@Html.EditorForModel()为模型生成字段。 然后用户填写所有这些字段,我想通过AJAX发送此字段,因为我应该做几台服务器的服务而无需重新加载页面。

我搜索了几种方法,但是似乎没有标准的方法可以做这些事情。 我的意思是我在客户端没有代表模型的对象。 我发现一个单独的库调用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的对象?

您可以使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM