230 messaggi dal 27 aprile 2009
ciao a tutti da poco sto guardando MVC e sto facendo varie prove per capire come funziona.
Ieri mi sono imbattuto in una cosa divertente e spero che qualcuno mi possa aiutare.
Ho creato una pagina master,dove all'interno ho messo un ViewUserControl
il quale lo messo dentro la cartella Shared cosi che possa essere visto ovunque.

Fin qua ci siamo :)

Questa pagina non è altro un menu di login con il relativo form.
Ecco come è fatta la pagina

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
<script src="../../Scripts/jquery-1.4.1.js" type="text/javascript"></script>
<script src="../../Scripts/jquery.validate.js" type="text/javascript"></script>
<script type="text/javascript">
    // Prima versione del codice JavaScript
    $(document).ready(function () {


        var btnLogin = $("input#btnLogin");
        // Codice per la validazione lato client
        var regFormRegister = $("#fLogin");

        regFormRegister.validate({
            // Regole di validazione 
            rules: {
                username: { required: true, minlength: 3 },
                password: { required: true, minlength: 5 }

            },
            // Messaggi di errore personalizzati
            messages: {
                username: {
                    required: "Username richiesto.",
                    minlength: "Username deve essere lunga almeno 3 caratteri."
                },
                password: {
                    required: "Password richiesta.",
                    minlength: "La password deve essere lunga almeno 5 caratteri."
                }
            }
        });


    });
</script>
<div id="dvLogin" class="Login">
    <% if (Session["username"] == null)
       { %>
    <div id='content'>
        <div id='basic-modal'>
            <a href='#' class='basic'>Login</a> -
            <%: Html.ActionLink("Registrazione", "Register", "Registrazione")%>
        </div>
        <div id="basic-modal-content">
            <table style="text-align: center; margin-top: auto;" width="100%">
                <tr>
                    <td>
                        <img id="Img1" src="~/Content/images/icologin.png" runat="server" alt="iconaLogin" />
                    </td>
                    <td>
                         <form action="/Login/Login" id="fLogin"   method="post">
                        <p>
                            Username
                            <%= Html.TextBox("username")%>
                            <label id="chkusername">
                            </label>
                        </p>
                        <p>
                            Password
                            <%= Html.TextBox("password")%>
                            <label id="chkpassword">
                            </label>
                        </p>
                        <p>
                            <input type="submit" value="Login" id="btnLogin" />
                        </p>
                        </form>
                    </td>
                </tr>
            </table>
        </div>
    </div>
    <% }
       else
       { %>
    <%: ViewData["Username"]%>
    <% } %>
</div>


    public class LoginController : Controller
    {
        //
        // GET: /Login/

        public ActionResult Login()
        {
            return View();
        }

        [HttpPost]
        public ActionResult Login(string username, string password)
        {
            return View();
        }

    }




Nel frattempo ho creato anche una pagina di Registrazione che funziona perfettamente.

IL PROBLEMA.

Ora se io mi trovo nella pagina di registrazione, e clicco su login in alto a destra , mi compare (come si vede dal codice sopra) un lightbox con la form di login.
Ora. al click sul pulsante lui va in POST,il problema che manda in post anche la pagina sotto cioè quella di registrazione XD XD.

DOMANDE:

1. Perchè mi va in post tutta la pagina? non dovrebbe andar in post solo il form che include il login?
2. Altra domanda in IE se clicco sul pulsante mi si chiude la lightbox perchè???? :( in chrome no.
3. Ultima domanda, al click sul pulsante mi aspettavo che entrasse nel controller Login e public ActionResult Login, ma non entra non capisco :(

Ps
se vado direttamente nel login
http://localhost:60748/Login/Login
tutto funziona :(

Mi sfugge qualcosa?
Grazie a tutti
Modificato da Stefano_VR il 22 novembre 2011 09.18 -
Modificato da Stefano_VR il 22 novembre 2011 09.26 -
Modificato da Stefano_VR il 22 novembre 2011 09.31 -
3.082 messaggi dal 06 settembre 2002
Contributi | Blog
Ciao,

solo una domanda, per caso il tuo usercontrol viene incluso in un altro form? mi spiego meglio, nel html finale, il tag form del login, è incluso in un altro form (magari quello della pagina di registrazione)?
HTH
Stefano
.

Nothing can be born from hartred

Stefano (SM15455) Mostarda
http://blogs.aspitalia.com/SM15455
Rome Italy
230 messaggi dal 27 aprile 2009
No sono separati.
Anche nella home dove non vi è nessun form non funziona.
Funziona se lo chiamo io direttamente http://localhost:60748/Login/Login

:(
Visto che stai comunque effettuando delle prove, ti consiglio di utilizzare MVC 3 piuttosto che la versione 2. Ti troverai meglio.

Sul tuo problema non saprei dirti...spero troverai una soluzione così la conviderai con tutti...ciao
Modificato da Mirko Pastorelli il 22 novembre 2011 11.21 -
230 messaggi dal 27 aprile 2009
sulla macchina però ho mvc 2 :( non posso installare il 3.
Ma cambi tanto?
Beh la sintassi cambia completamente...diventa più intuitiva con razor... dai un occhiata a questo speciale di Marco De Sanctis

http://www.aspitalia.com/focuson/1253/Speciale-Razor-View-Engine-WebMatrix-ASP.NET-MVC.aspx

o meglio da un occhiata a questi webcast su MVC 3...

http://www.microsoft.com/italy/webcamps/#top

Ciao
230 messaggi dal 27 aprile 2009
Passato a MVC 3 :)
e mi Gusta.
Ho fatto i controlli form con classi ecc..ora però c'è qualcosa che non capisco veramente.
In teoria al click sul pulsante dovrebbe entrare nel POST invece va sempre sull'altra

        public ActionResult Login()
        {
            return View();
        }

        [HttpPost]
        public ActionResult Register(UtenteModel Model)
        {
}


non capisco il motivo.
Ho guardato anche il progetto di Microsoft ma mi sembra come la mia.
Perchè a me non entra nel POST?
questo HTML
@model MVC3Test.Models.UtenteModel
@{
    ViewBag.Title = "Register";
    Layout = "~/Views/Shared/_Layout.cshtml";
}
<!--Includiamo JQuery nella pagina-->
<div style="margin-right: auto; margin-left: auto; width: 600px;">
    <br />
    <fieldset>
        <legend>&nbsp;<b>REGISTRAZIONE UTENTE</b>&nbsp; </legend>
        <br />
        <div style="margin-left: 10px;">
            @using (Html.BeginForm())
            {
                @Html.ValidationSummary(true, "Account creation was unsuccessful. Please correct the errors and try again.")
          
      
                @ViewData["Errore"]
                <p>
                    @Html.LabelFor(model => model.Username)<br />
                    @Html.EditorFor(model => model.Username)
                    @Html.ValidationMessageFor(model => model.Username)
                </p>
                <p>
                    @Html.LabelFor(model => model.Password)<br />
                    @Html.EditorFor(model => model.Password)
                    @Html.ValidationMessageFor(model => model.Password)
                </p>
                <p>
                    @Html.LabelFor(model => model.cPassword)<br />
                    @Html.EditorFor(model => model.cPassword)
                    @Html.ValidationMessageFor(model => model.cPassword)
                </p>
                <p>
                    @Html.LabelFor(model => model.Email)<br />
                    @Html.EditorFor(model => model.Email)
                    @Html.ValidationMessageFor(model => model.Email)
                </p>
                <p>
                    @Html.LabelFor(model => model.cEmail)<br />
                    @Html.EditorFor(model => model.cEmail)
                    @Html.ValidationMessageFor(model => model.cEmail)
                </p>
                <p>
                    <input type="submit" value="Registrati!" /></p>
            }
        </div>
    </fieldset>
</div>



Chi mi illumina ?
Altra cosa il controllo per un indirizzo email lo devo per forza fare con le regular expression?
Per la mail si...regular expression.

Saluti

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.
Community
Ultimi messaggi
UTENTI ONLINE
In primo piano

I più letti di oggi

Media
In evidenza
MISC