0

我在我的应用程序中使用 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]);
    }

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

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

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

1 回答 1

2

我通常对 View 有两个 Actions 。虽然这不是强制性要求。

当用户第一次访问页面时,第一个用 Get装饰的操作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);
    }
}

注意:您将不得不调用 ajax 调用HttpMethod = "post"。ASP.NET 中的 ModelBinder 会将请求中发布的值绑定到您的 responseModelworksheets

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

于 2013-01-03T19:15:22.353 回答