gpt4 book ai didi

c# - 首页局部 View 登录

转载 作者:行者123 更新时间:2023-11-30 17:08:21 25 4
gpt4 key购买 nike

这个问题已经被问过很多次了,但我不认为我需要它。

我正在尝试在主页上实现一个登录表单,但此表单位于弹出的部分中,就像您在本网站上看到的那样:http://myanimelist.net .

我为我的登录表单创建了一个部分 View :

@model ArtWebShop.Models.customers

@section Validation {
@Scripts.Render("~/bundles/jqueryval")
}

<section id="login">

@using (Html.BeginForm("LoginValidate", "Login", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
@Html.ValidationSummary(true)
@Html.ValidationSummary()
<fieldset>
<legend>Login</legend>

@Html.LabelFor(model => model.email)
@Html.TextBoxFor(m => m.email)

@Html.LabelFor(m => m.password)
@Html.PasswordFor(m => m.password)

<input type="submit" value="Login" class="button" />
</fieldset>
}

</section>

这显示在主页 (index.cshtml) 上:

<section class="shown">
@Html.Partial("_LoginPartial")
@Html.ValidationSummary(true)
@Html.ValidationSummary()
</section>

局部 View 显示正确。但现在是不起作用的部分。

如果您没有填写字段,当您按下登录时,验证会在我的 LoginController 中完成,但我似乎无法在重定向时将错误发送到我的主页 View 。

    [HttpPost]
public ActionResult LoginValidate(string redirect)
{
if (_unitOfWork.CustomersRepository.CostumerIsValid(Request.Form["email"], Request.Form["password"]))
{
if (!String.IsNullOrEmpty(redirect) || String.Compare(redirect, "none", StringComparison.OrdinalIgnoreCase) == 0)
{
if (redirect != null) Response.Redirect(redirect, true);
}
else
{
return RedirectToAction("index", "Home");
}
}
ModelState.AddModelError("email", "You entered an incorrect email address");
ModelState.AddModelError("password", "You entered an invalid password");

return RedirectToAction("index", "Home");
}

那是我的登录验证。由于未填写任何内容,错误被添加到 ModelState,然后它重定向到主页。然而,这并没有向我显示错误。我猜这正是因为我重定向了,但我该如何解决呢?

最佳答案

您可以使用 TempDataDictionary在重定向之间存储 ModelStateDictionary

TempDataDictionary Class
Represents a set of data that persists only from one request to the next.

在您的 LoginValidate 操作中,您将像这样存储 ModelState:

public ActionResult LoginValidate(string redirect)
{
/* Your other code here (omitted for better readability) */

ModelState.AddModelError("email", "You entered an incorrect email address");
ModelState.AddModelError("password", "You entered an invalid password");

// Add the ModelState dictionary to TempData here.
TempData["ModelState"] = ModelState;

return RedirectToAction("index", "Home");
}

并且在您的 HomeControllerIndex 操作中,您将检查 TempData 是否具有 ModelState:

public ActionResult Index()
{
var modelState = TempData["ModelState"] as ModelStateDictionary;
if (modelState != null)
{
ModelState.Merge(modelState);
}

return View();
}

您可以使用自定义操作过滤器使它更清晰一些;见this blog , 13 号。

关于c# - 首页局部 View 登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13786663/

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