gpt4 book ai didi

asp.net-mvc - ASP.Net MVC 3 : Child Action and Redirect

转载 作者:行者123 更新时间:2023-12-02 18:14:31 25 4
gpt4 key购买 nike

我需要在主页上显示注册表单和登录表单。

如果这两种表单上的验证失败,我需要在主页上显示正确的错误。

但如果没有错误,则必须将用户重定向到安全仪表板。

为了实现此目的,我在主页上使用子操作,如下所示:

@Html.Action("Register", "Membership")

如果出现任何错误,它会按照预期完美工作,因为它能够使用正确的模型重新渲染部分 View 具有验证状态信息。

但是如果没有错误,当它尝试重定向时,它会抛出一个错误,指出:

Child actions are not allowed to perform redirect actions.

有什么办法可以解决这个问题吗?我确信有一种方法可以将注册和登录表单放在主页上。我很可能不知道,因为我对 ASP .Net MVC 还很陌生。

你能指出我正确的方向吗?

最佳答案

实现此目的的一种方法是使用 ajax 表单作为登录和注册位,并且在提交有效时返回一些 json,而不是返回 RedirectResult,一些客户端脚本将监视并使用该 json为您进行重定向。

这是一个简化的示例。

Controller :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.ComponentModel.DataAnnotations;
using MvcApplication12.Models;

namespace MvcApplication12.Controllers
{
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}

public ActionResult Register()
{
return PartialView(new UserDetails());
}

[HttpPost]
public ActionResult Register(UserDetails details)
{
if (ModelState.IsValid)
{
return Json(new {redirect = true, url = Url.Action("Index","Dashboard")});
}
else
{
return PartialView(details);
}
}
}
}

主页“索引” View :

@{
ViewBag.Title = "Index";
}
<script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
<script type="text/javascript">
function checkForRedirect(data)
{
if (data.redirect && data.url)
{
location.href = data.url;
}
}
</script>

<p>Home page stuff.....</p>

<div id="RegistrationArea">
@Html.Action("Register")
</div>

<p> Home page stuff.....</p>

注册表“注册”部分 View :

@model MvcApplication12.Models.UserDetails
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>

@using (Ajax.BeginForm(new AjaxOptions()
{
HttpMethod = "POST",
Url = Url.Action("Register", "Home"),
OnSuccess = "checkForRedirect(data)",
UpdateTargetId = "RegistrationArea",
InsertionMode = InsertionMode.Replace
}))
{
@Html.LabelFor(m => m.UserName)
@Html.EditorFor(m => m.UserName)
@Html.ValidationMessageFor(m => m.UserName)

@Html.LabelFor(m => m.Password)
@Html.EditorFor(m => m.Password)
@Html.ValidationMessageFor(m => m.Password)

<input type="submit" />
}

关于asp.net-mvc - ASP.Net MVC 3 : Child Action and Redirect,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10039489/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com