2012-04-04 6 views
0

serialisieren Ich habe ein kleines Anfängerproblem, das ich nicht herausfinden kann, habe ich ein Formular, das aus einer Teilansicht von einem asp.net-Controller generiert, es wird dann in einem jquery Dialog angezeigt.Kann Daten von Format Json von einem Jquery-Dialog zu Asp.net MVC 3-Controller

Ich habe 2 Tasten auf dem Dialog (Speicher/Abbrechen)

auf der Schaltfläche Speicher, ich die Eingaben aus dem Formular zur Serialisierung will es die Asp.net Mvc Action zurück zu schicken, aber es doesn‘ t scheint zu funktionieren, der actioncontroller ruft das Modellobjekt nicht aus dem Jquery Dialog ab, ich benutze die Jquery Serialize Funktion für das Formular.

Hier ist der Code Script:

<button id="btnDialog">Account Logon</button> 

<div id="Logonform"></div> 

<script type="text/javascript"> 

    $(document).ready(function() { 

     $.validator.unobtrusive.parse("#Logonform"); 

     $("#Logonform").dialog({ 
      autoOpen: false, 
      modal: true, 
      title: 'Login', 

      buttons: { 
       Save: function() { 
        alert($("#Logonform").serializeArray()); 
        alert($("#Logonform").attr('UserName')); 

        $.ajax({ 
         url: "@Url.Action("LogOn", "Account")", 
         type: "POST", 
         data: $("#Logonform").serialize(), 
         datatype: "JSON", 
         success: function (result) { 
          $("#Logonform").html(result).dialog('open'); 
         } 
        }); 
       }, 

       Close: function() { 
        $(this).dialog('close'); 
       } 
      } 

     }); 

     $("#btnDialog").click(function() { 
      $.ajax({ 
       url: "@Url.Action("LogOn", "Account")", 
       type: "GET", 
       success: function (result) { 
        $("#Logonform").html(result).dialog('open'); 
       } 

       }); 
     }); 
    }) 

</script> 

Der Controller:

public ActionResult LogOn() 
    { 
     if (Request.IsAjaxRequest()) 
     { 
      return PartialView("_Logon"); 

     } 
     return View(); 
    } 

    [HttpPost] 
    public ActionResult LogOn(LogOnModel model) 
    { 
     if (ModelState.IsValid) 
     { 
      if (Membership.ValidateUser(model.UserName, model.Password)) 
      { 
       FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe); 
       return Json(new { result = "ok", user = model.UserName }); 
      } 
      else 
      { 
       return PartialView("_Logon"); 
      } 
     } 

die Ansicht:

@model JqueryDialogTest.Models.LogOnModel 


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

@Html.ValidationSummary(true, "Échec de la connexion. Corrigez les erreurs et réessayez.") 

@using (Html.BeginForm()) { 
    <div> 
     <fieldset> 
      <div class="editor-label"> 
       @Html.LabelFor(m => m.UserName) 
      </div> 
      <div class="editor-field"> 
       @Html.TextBoxFor(m => m.UserName) 
       @Html.ValidationMessageFor(m => m.UserName) 
      </div> 

      <div class="editor-label"> 
       @Html.LabelFor(m => m.Password) 
      </div> 
      <div class="editor-field"> 
       @Html.PasswordFor(m => m.Password) 
       @Html.ValidationMessageFor(m => m.Password) 
      </div> 

      <div class="editor-label"> 
       @Html.CheckBoxFor(m => m.RememberMe) 
       @Html.LabelFor(m => m.RememberMe) 
      </div> 

     </fieldset> 
    </div> 
} 

Jeder Kommentar von Ihnen, was falsch, darauf hinzuweisen wäre sehr dankbar

Prost

Antwort

0

Versuchen Sie, Ihren Logon-Aktionsparameter von einem LogonModel-Typ in einen String zu ändern und ihn in der Aktionsmethode mithilfe von JavascriptSerializer selbst zu deserialisieren. Wenn das immer noch nicht funktioniert, verwenden Sie Fiddler, um zu sehen, was (wenn überhaupt) im POST gesendet wird.

+0

Hallo, Danke für Ihren Kommentar, Ihr Vorschlag ist eine Möglichkeit, es zu tun, aber ich änderte das Skript von Daten: $ ("# Logonform"). Serialize() zu Daten: $ ('Form')(), es funktioniert einwandfrei, nun bekommt der actionController das Objekt korrekt, aber jetzt komme ich zu einem anderen Problem, es gibt keine Client-Validierung im Dialog vor dem Senden des JSON-Formulars an die actionController-Methode, irgendeinen Tipp wie? – dtjmsy

+0

Da Sie JQuery für die AJAX-Aufrufe verwenden, würde ich JQuery für die Überprüfung verwenden. Hier sind einige JQery-Dokumente zur Validierung (http://docs.jquery.com/Plugins/Validation). –

Verwandte Themen