我有两个控制器 - 登录和列表
我正在验证凭据并返回列表视图。
LoginController.cs
public ActionResult Authentication(string GlobalId, string password)
{
// validation code
return RedirectToAction("Index", "List");
}
ListController.cs
public ActionResult Index()
{
List<EbitProjectModel> obj = new List<EbitProjectModel>();
obj = _categoryMasterService.getProjectInformationAll();
return view("Index", obj);
}
这里它正确地重定向到ListController的Index方法。但它不渲染那个视图(索引视图)。它保持了相同的视图(登录视图),我在ajax.BeginForm帖子的帮助下调用了Authentication方法。
这里有什么我想念的吗?
答案 0 :(得分:1)
看起来,与您在问题中最初提到的内容相反,您使用的是Ajax.BeginForm
而不是Html.BeginForm
。不同之处在于第一个将使用AJAX请求提交表单。这意味着浏览器不会离开页面,因此您有责任使用此AJAX请求提供的任何信息更新DOM。
在这种情况下,从这样的操作返回View
是没有意义的,而是PartialView
,这样您只能更新DOM的相关部分:
return PartialView("Index", model);
为了让更新发生,您需要在Ajax.BeginForm
中指明将注入结果的div的id:
@using (Ajax.BeginForm(new AjaxOptions { UpdateTargetId = "result" }))
{
...
}
假设您有以下占位符:
<div id="result"></div>
但是因为这是一个登录表单,所以做一个完整的回发并远离登录表单可能更有意义:
@using (Html.BeginForm())
{
...
}
在这种情况下,浏览器会将凭据POST到Authentication
操作,然后该操作将重定向到ListController的Index
操作并呈现相应的视图。