C# MVC3在提交后接收新模型数据

C# MVC3在提交后接收新模型数据,c#,asp.net-mvc-3,post,model,submit,C#,Asp.net Mvc 3,Post,Model,Submit,我无法更新视图模型 我的观点叫做:概述 我在视图的控制器中有: public ActionResult Overview() { var evo = new OverviewViewObject { MvcGridModel = new MvcGrid(), SingleExportData = new SingleExportData() }; return View(evo); } 那我就要存钱了 这些按钮称为: $.a

我无法更新视图模型

我的观点叫做:概述

我在视图的控制器中有:

public ActionResult Overview()
{
    var evo = new OverviewViewObject
    {
        MvcGridModel = new MvcGrid(),  
        SingleExportData = new SingleExportData()
    };

    return View(evo);
}
那我就要存钱了 这些按钮称为:

$.ajax({
         url: saveUrl,
         cache: false,
         type: "post",
         data: JSON.stringify({  Name:  myName  }),
          contentType: "application/json",
          success: function (data) { .. }...
保存URL将转到:

[HttpPost]
public ActionResult Save(MyDataType saveData)
{
    //todo save logic here

    var mvcGridModel =  GetGridData();
    var evo = new ExportDataOverviewViewObject
    {
        MvcGridModel = mvcGridModel ?? new MvcGrid(),
        SaveData = new MyDataType()
    };

    return View("Overview", evo);
}
它在Save中运行良好,在saveData对象中获得良好的数据,直到最后它才返回任何错误,但是当返回后显示视图时,数据不再显示在那里

你能帮帮我吗?

说几句话:

  • 如果保存按钮是表单提交按钮或锚定按钮,请确保在$.ajax调用后从回调返回false,以确保不执行默认操作
  • 在控制器操作中,您返回的是完整视图(
    returnview()
    ),而不是部分视图,这对于使用AJAX调用的控制器操作更为常见
因此,总结一下:

$('#saveButton').click(function() {
    $.ajax({
        url: saveUrl,
        cache: false,
        type: 'POST',
        data: JSON.stringify({ Name: myName }),
        contentType: 'application/json',
        success: function (data) { 
            // do something with the data => refresh some
            // portion of your DOM
            $('#someDivId').html(data);
        }
    });
    return false;
});
以及控制器的操作:

[HttpPost]
public ActionResult Save(MyDataType saveData)
{        
    //todo save logic here

    var mvcGridModel = GetGridData();
    var evo = new ExportDataOverviewViewObject
    {
        MvcGridModel = mvcGridModel ?? new MvcGrid(),
        SaveData = new MyDataType()
    };
    return PartialView("Overview", evo);
}

不知道问题出在哪里。浏览器是否重定向到新视图?预期的结果是什么?为什么要从AJAX调用的控制器操作返回完整视图而不是PartialView?它应该转到调用该操作的同一视图。很好。但是在那里我想显示新的数据,并且eventhough我用View(“Overview”,evo)传递它。对象不会用新数据刷新。部分是HTML的一部分,而不是整个HTML页面。从ASP.NET MVC的角度来看,这意味着您将返回一个
PartialView
,而不是
视图
。这意味着将不再应用布局。从客户端的角度来看,您应该使用这个部分刷新DOM的某些部分。这应该在
success
AJAX回调中使用
.html()
函数来完成。在我在回答中提供的示例中,我假设您希望使用控制器操作返回的部分HTML刷新某个元素
id=“someDivId”
。似乎我没有确切地询问我需要什么,但您以完美的方式回答了我的问题,因此我将其设置为已回答。非常感谢你!好建议!