将修改后的模型提交回控制器

时间:2013-07-10 13:42:40

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

我有一个编辑页面,当我按下按钮然后将名为#main的页面的给定部分的div更改为另一个页面以便使用新信息更新它时,我想向服务器提交一些更改

要做到这一点,我不认为我可以使用提交按钮(如果我错了,请更正我?)所以我使用jquery函数来处理点击和更改页面的选定部分。 / p>

目前发送到服务器的对象是空的,而不是修改后的内容。

以下是有问题的视图:

@model Project.Models.ExampleModel

@using (Html.BeginForm())
{
    <fieldset>
        <legend>Edit Example: @Model.name</legend>
        <br/>
        @Html.LabelFor(c => c.name)
        @Html.TextBoxFor(c => c.name)
        <br/>
        @Html.LabelFor(c => c.dropdown)
        @Html.DropDownListFor(c => c.dropdown, Model.dropdowns)
        <br />
        <br />
        <input type="button" data-edit-id="@Model.id" value="Submit Changes" />
    </fieldset>
}

<script type="text/javascript">
    $(document).ready(function () {
        $('input[data-edit-id]').on('click', function () {
            var id = $(this).attr('data-edit-id');
            console.log(id);
            $.post('Home/EditPage', '@Model');
            $("#main").load("/Home/NewDivPage?id=" + id);
        });
    });
</script>

非常感谢任何帮助

1 个答案:

答案 0 :(得分:1)

这是错误的

$.post('Home/EditPage', '@Model');
在服务器端评估

@Model,并在客户端使用该表达式获得简单的字符串。您应该动态序列化form并将其内容发送到服务器

$.post('Home/EditPage', $('form').serialize());

此外,最后一个语句应作为回调传递给$ .post,因此它将在post完成加载后执行

$.post('Home/EditPage', $('form').serialize(), function(){
   $("#main").load("/Home/NewDivPage?id=" + id); 
});