使用.ajax从View发布到Controller时,ViewModel对象为null

时间:2014-03-12 04:58:44

标签: jquery ajax asp.net-mvc asp.net-mvc-3 post

使用$ .Ajax Post时,在Post Action参数中获取ViewModel obj的Null值

查看

        @using (Ajax.BeginForm("", "", Model, new AjaxOptions() { HttpMethod = "POST" }, new { enctype = "multipart/form-data", id="AreaForm" }))
        {      

            @Html.AntiForgeryToken()
            @Html.ValidationSummary(true)

            <fieldset>
                <legend>Areabalmodel</legend>

                <div class="editor-label">
                    @Html.LabelFor(model => model.project.project_ID)
                </div>
                <div class="editor-label">
                    @Html.DisplayFor(model => model.project.project_ID)
                    @Html.HiddenFor(model => model.project.project_ID)
                </div>
                <div class="editor-label">
                    @Html.LabelFor(model => model.areabal.AreaDesc)
                </div>
                <div class="editor-field">
                    @Html.EditorFor(model => model.areabal.AreaDesc)
                    @Html.ValidationMessageFor(model => model.areabal.AreaDesc)
                </div>

                <div class="editor-label">
                    @Html.LabelFor(model => model.areabal.Location)
                </div>



                <div class="editor-field">

                    @Html.TextBoxFor(model => model.files, new { Name = "files", type = "file", id = "files", onchange = "PreviewImage();" })

                </div>

                <p>
                    @*<input type="submit" value="Updated" />*@
                    <input type="button" id="UpdateArea" value="Update" />
                </p>

            </fieldset>        



        }
<script type="text/javascript">

$(document).ready(function () {

 $("#UpdateArea").click(function () {
            UpdateAreaFunction();


        });

        function UpdateAreaFunction() {

            if ($("#AreaDesc").val() == '') {
                alert('IF');

                //$("#CostFieldName_span").html("Name is required");

            }
            else {

                var dataToSend = {
                    areabal: {
                        Area_ID: 1,
                        Project_ID: 1,
                        AreaDesc : "dsdsds"
                    }

                };


                var formdata1 = $('#AreaForm').serialize();

                //alert(formdata1);
                console.log(formdata1);

                $.ajax({
                    url: '@Url.Action("UpdateArea_POST", "Builder")',
                    type: 'POST',
                    dataType: 'json',
                    //data: $.toDictionary(dataToSend),
                    data: JSON.stringify(dataToSend),
                    mimeType: "multipart/form-data",
                    contentType: false,
                    cache: false,
                    processData: false,
                    success: function (result) {
                        alert(result);




                    }
                });
            }

        }






    });
</script>

Controller的ActionMethod

[HttpPost]
        public string UpdateArea_POST(Createviewmodel Crv)
        {
            //Getting Null Values of all crv

            return "done";

        }

可以帮我看错吗?

1 个答案:

答案 0 :(得分:0)

要以类似ajax的方式上传文件,您可以使用&#39; iFrame Post Form&#39; jQuery的插件。

$(document).ready(function () {
        $('form').iframePostForm();
});

因为你在控制器中有一个复杂的模型Createviewmodel,我建议你不要在json中发布它manunaly。而是正确命名字段。当用户点击提交时,数据将在Crv

中正确填充
<div class="editor-field">
    <input type="text" name="areabal.AreaDesc" />
    @Html.ValidationMessageFor(model => model.areabal.AreaDesc)
</div>

<div class="editor-label">
    @Html.LabelFor(model => model.areabal.Location)
</div>

<div class="editor-field">
    <input type="file" name="files" onchange = "PreviewImage();" />
</div>
<p>
    <input type="submit" value="Updated" />
</p>

逻辑if ($("#AreaDesc").val() == '')可以在服务器端完成。

因此,请勿在此方案中使用$.ajax

相关问题