【问题标题】:ASP.Net MVC model binding to javascriptASP.Net MVC 模型绑定到 javascript
【发布时间】:2016-03-28 12:38:15
【问题描述】:

问题很简单:我使用@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 的对象?

【问题讨论】:

标签: javascript asp.net asp.net-mvc asp.net-mvc-4


【解决方案1】:

查看

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

【讨论】:

  • 感谢您的回答,它最适合我的情况。增强的代码可以在这个url中找到。
【解决方案2】:

您可以使用 jQuery 将表单序列化为 JSON 对象:

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

(当然,这意味着将您的表单元素包装在 form 中,无论如何都应该这样做。)

然后在 POST 请求中将该 data 对象传递给服务器。一些简单的事情:

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

无需手动构造具有数百万个 document.getElementById 的对象

请注意,如果您的对象有 数百万 个字段,那么您很可能会在此处遇到 其他 问题。

【讨论】:

    【解决方案3】:
    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(){
        })
    

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-15
        • 2011-04-30
        • 2011-03-04
        相关资源
        最近更新 更多