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