3 Stimmen

ASP.NET MVC + Modelstate und partielle Ansicht

Ich habe eine partielle Ansicht namens LogOn, wo ich im Grunde kopiert die Logon-Eingaben in ein Steuerelement. Ich verwende Html.RenderPartial, um das Steuerelement in meinem Index.Html innerhalb einer Ajax.BeginForm zu platzieren.

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

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

   <% } %>
        </div> 

Ich versuche, die Validierungsmeldungen zurückzugeben und anzeigen zu lassen, aber ich scheine es nicht hinzubekommen, zu funktionieren. Ich bin das Modell an die Ansicht übergeben, aber es scheint nicht, die Validierung richtig zu machen.

Mein 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");
        }
    }

Meine Teilansicht

<%= 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>

Ich versuche, die Vorschläge aus diesem Thread zu nutzen ( http://forums.asp.net/p/1398814/3023892.aspx#3023892 ), aber ich bin nicht sicher, ob das richtig ist. Alles, was ich wirklich möchte, ist die Möglichkeit, die LogOn-Funktion auf der Startseite zu platzieren, anstatt zu einer neuen Seite navigieren zu müssen, um sie zu nutzen. Wenn es eine einfachere Möglichkeit gibt, dies zu tun, bin ich ganz Ohr! danke im Voraus.

0voto

Mehdi Golchin Punkte 7713

Ich denke, es sind einige Dinge erforderlich. Sie haben nicht überprüft, ob die Eingänge leer sind oder nicht, und Sie haben keine Fehlermeldung zu Ihrem Modellstatus hinzugefügt.

// 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");

0voto

Mehdi Golchin Punkte 7713

Hey Mann, es tut mir wirklich leid. Ich habe die Standard MVCApplication Projektvorlage nicht gesehen.

Prüfen Sie es, um Ihr Problem zu lösen.

Die Kontrolle:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>

<script src="../../Scripts/MicrosoftAjax.js" type="text/javascript"></script>

<script src="../../Scripts/MicrosoftMvcAjax.js" type="text/javascript"></script>

<%= Html.ValidationSummary("Login was unsuccessful. Please correct the errors and try again.") %>
<% using (Ajax.BeginForm("LogOn", "Account", new AjaxOptions() { UpdateTargetId = "UpdatePanel" }))
   { %>
<div id="UpdatePanel">
    <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>
<% } %>

Der Code:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult LogOn(string userName, string password, bool rememberMe, string returnUrl)
{

    if (!ValidateLogOn(userName, password))
    {
        return PartialView("Login");
    }

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

Das funktioniert bei mir. Wenn das Problem weiterhin besteht, prüfen Sie die Antwort und die Anfrage mit Firebug .

Ich hoffe, das hilft

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X