【问题标题】:How to save the current model when ajax is requesting?ajax请求时如何保存当前模型?
【发布时间】:2013-01-03 18:12:56
【问题描述】:

我在我的应用程序中使用 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" />
}

【问题讨论】:

  • 你为什么不把调用分成两个动作。一个是渲染视图的 Get 操作,另一个是根据最终用户的响应执行的 POST 操作。 Post 动作可以有一个参数 List,ASP.NET ModelBinder 会处理剩下的!
  • @frictionlesspulley 我理解的第一部分。你能举个例子来指导我吗?我对 MVC 不太熟悉,也不知道如何通过 Http 传递参数 List
  • 您似乎只是在这里做一个获取,而不是将现有数据发布回服务器。您是否希望它在每次获取时更新存储在会话中的数据?
  • 我想如果我要通过帖子来做这个会话没有意义..这是我的第一个选择
  • 你试过返回一个数组吗? return View(worksheets[0]).toArray();

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


【解决方案1】:

我通常有两个 Action 用于 View 。虽然这不是强制性要求。

用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/ 上提供的“getting-started-with-aspnet-mvc4”教程

【讨论】:

  • 我明白了!!我喜欢!!只是一个疑问,当我按下提交按钮时,它并没有访问HTTPPost方法,我发布时是否需要指定一些routeValue?
  • 您是否使用 HttpMethod = "Post" 调用 ajax 调用?
  • 是的,现在它正在访问它。现在我正在处理的是当我收到我的列表时,该值为 null
  • 确保模型有一个默认的构造函数并且你正确地发送了命名参数
  • 不不,我的意思是,当我调试变量工作表时有 0 个元素.. 这非常罕见,因为我可以在 HTTPGET 时看到数据
猜你喜欢
  • 2023-01-23
  • 1970-01-01
  • 2019-06-02
  • 2013-08-26
  • 2015-09-07
  • 1970-01-01
  • 1970-01-01
  • 2020-04-30
  • 2015-08-16
相关资源
最近更新 更多