如何在ajax请求时保存当前模型?

时间:2013-01-03 18:12:57

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

我在我的应用程序中使用Ajax更新视图而不刷新网页。

你能注意到这里http://contoso2.azurewebsites.net/Test/DoTest,因为我突出了黄色的局部视图。

但问题是,当我向项目输入数据(数学问题)时,当Ajax请求时,我看不到模型中的变化。

    public ActionResult DoTest()
    {
        List<Worksheet> worksheets = null;

        if (Request.IsAjaxRequest())
        {
            worksheets = Session["Worksheets"] as List<Worksheet>;
            return PartialView("_Problems", worksheets[1]);
        }

        worksheets = new List<Worksheet>()
        {
            new Worksheet("Addition and Subtraction of absolute values", new List<Problem1>() { ... }),
            new Worksheet("Addition and Subtraction of absolute values", new List<Problem1>() { ... })
        }

        Session["Worksheets"] = worksheets;
        return View(worksheets[0]);
    }

我正在使用Session来恢复我的模型,但如果我在其中进行调试,我看不到模型的任何变化。当我按下继续按钮时,我该怎么做,我的模型更新。

编辑:这包含我在剃刀视图中的AJAX

@using (Ajax.BeginForm(
    new AjaxOptions
    {
        HttpMethod = "get",
        InsertionMode = InsertionMode.Replace,
        UpdateTargetId = "problemList"
    }))
{
    <input type="submit" value="Continue" />
}

1 个答案:

答案 0 :(得分:2)

我通常对视图有两个操作。虽然这不是强制性要求。

当用户第一次访问该页面时,使用HttpGet修饰的第一个操作会将页面呈现为Get。当用户单击下一个并发布表单时,将调用第二个操作。

public class TestController {

   [HttpGet]
   public void DoTest(){

        var viewModel = new List<Worksheet>()
        {
            new Worksheet("Addition and Subtraction of absolute values", new List<Problem1>() { ... }),
            new Worksheet("Addition and Subtraction of absolute values", new List<Problem1>() { ... })
        };
        return View(viewModel);
    }

   [HttpPost]
   public void DoTest(List<Worksheet> worksheets){

        //do whatever you want with the user response

        var response =  worksheets[1]; 
        PartialView("_Problems",responseModel);
    }
}

注意:您必须使用HttpMethod = "post"调用ajax调用。 ASP.NET中的ModelBinder会将请求中发布的值绑定到responseModel worksheets

您应该尝试查看http://asp.net/上提供的“get-started-with-aspnet-mvc4”教程