asp.net-mvc - ASP.NET MVC + 模型状态和局部 View

标签 asp.net-mvc ajax validation authentication

我有一个名为 LogOn 的局部 View ,我基本上将登录输入复制到一个控件中。我正在使用 Html.RenderPartial 将控件放在 Ajax.BeginForm 内的 Index.Html 中

<div id="login_ajaxtarget">
   <% using (Ajax.BeginForm("Logon", "Account", new AjaxOptions { UpdateTargetId = "login_ajaxtarget", HttpMethod = "Post" })) { %>

       <% Html.RenderPartial("LogOn"); %>

   <% } %>
        </div> 

我正在尝试传回验证消息并显示它们,但我似乎无法让它工作。我正在将模型传递给 View ,但它似乎没有正确呈现验证。

我的 Controller

public ActionResult LogOn(string userName, string password, bool rememberMe, string returnUrl)
    {

        if (!ValidateLogOn(userName, password))
        {
            return PartialView("LogOn", ModelState);
            //return RedirectToAction("Index", "Home");
        }

        FormsAuth.SignIn(userName, rememberMe);
        if (!String.IsNullOrEmpty(returnUrl))
        {
            return Redirect(returnUrl);
        }
        else
        {
            return RedirectToAction("Index", "Home");
        }
    }

我的部分观点

<%= Html.ValidationSummary("Login was unsuccessful. Please correct the errors and try again.") %>


        <div>
            <fieldset>
                <legend>Account Information</legend>
                <p>
                    <label for="username">Username:</label>
                    <%= Html.TextBox("username") %>
                    <%= Html.ValidationMessage("username") %>
                </p>
                <p>
                    <label for="password">Password:</label>
                    <%= Html.Password("password") %>
                    <%= Html.ValidationMessage("password") %>
                </p>
                <p>
                    <%= Html.CheckBox("rememberMe") %> <label class="inline" for="rememberMe">Remember me?</label>
                </p>
                <p>
                    <input type="submit" value="Log On" />
                </p>
            </fieldset>
        </div>

我正在尝试使用此线程 (http://forums.asp.net/p/1398814/3023892.aspx#3023892) 中的建议,但我不确定这是否正确。我真正想要的是能够将 LogOn 功能放在主页上,而不必导航到新页面才能使用它。如果有更简单的方法来做到这一点,我洗耳恭听!提前致谢。

最佳答案

我认为有些东西是必需的。您没有检查输入是否为空,也没有向您的模型状态添加任何错误消息。

// In your action add somethings like bellow.

if (String.IsNullOrEmpty(userName))
    this.ModelState.AddModelError("UserName", "The username is required.");

if (this.ModelState.IsValid)
{
    // Do login
}

return PartialView("Login");

关于asp.net-mvc - ASP.NET MVC + 模型状态和局部 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1556533/

相关文章:

asp.net - .net MVC Controller 究竟如何知道要返回哪个 View()?

jquery - .load() 在图像准备好之前触发

php - 在 Chrome Dev Tools 的网络选项卡预览中隐藏信息

javascript - 等待 api 调用的异步 ajax 的完整响应

javascript - 如何在 javascript 中为文件夹名称创建正则表达式?

jquery - AJAX 将不带表单的 ValidateAntiForgeryToken 发布到 MVC 操作方法

asp.net - 将 asp.net.mvc 添加到 ASP.NET : Controllers folder

asp.net - HttpResponseMessage 不返回 ByteArrayContent - ASP.NET Core

spring - Spring 4.0 中的动态验证

java - NotReadablePropertyException : Invalid property '<collection element>' when validating list of string