控制器不返回视图

时间:2017-01-06 09:41:38

标签: c# asp.net-mvc

我有两个控制器 - 登录和列表

我正在验证凭据并返回列表视图。

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方法。

这里有什么我想念的吗?

1 个答案:

答案 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操作并呈现相应的视图。