通过重定向到路由结果内容进行路由为空

本文关键字:路由 结果 重定向 | 更新日期: 2023-09-27 17:56:30

我有一个奇怪的属性,我有一个属性可以执行下面看到的工作,但奇怪的部分是控制器命中/接受,点得到模型。

return new RedirectToRouteResult(new RouteValueDictionary(new
{
    controller = controller,
    action = action,
    model = new LoginUserModel()
    {
        flowPartial = true,
        gotoController = (string)rData.Values["controller"],
        gotoAction = (string)rData.Values["action"],
        formData = formDatas
    }
}));

此处模型为空

public ActionResult LoadPartialWithModel(LoginUserModel model)
{
    return PartialView("~/Views/Partials/_Login.cshtml", model);
}

通过重定向到路由结果内容进行路由为空

我认为

这行不通。重定向结果会将 HTPP 301 发送到浏览器,其中包含一个新 url,然后浏览器将作为 GET 请求请求该 URL。无法将复杂模型编码为 get 请求的参数。这在帖子中的模型绑定中得到了支持,但如果您查看细节,它会变得相当长。您可以做的一件事是让第二种方法接受简单的参数

public ActionResult LoadPartialWithModel(bool flowPartial, string controller, ....)

然后在重定向到路由中将它们分别作为路由值传递。这应该创建一个漂亮的 URL,其中包含浏览器可以重定向到的查询字符串中的参数

这是假设您需要通过浏览器,因为如果不需要,则可以直接调用其他控制器方法

return LoadPartialWithModel (new LoginUserModel()
{
    flowPartial = true,
    gotoController = (string)rData.Values["controller"],
    gotoAction = (string)rData.Values["action"],
    formData = formDatas
});