Formulaire de publication des données de Contrôleur de l'action avec l'Ajax

J'ai une page dans MVC3, avec un lien (Ajax.ActionLink). Lorsque l'utilisateur clique dessus, il demande du contrôleur de l'action, et le résultat est inséré dans un div, avec la remplacer.

Code est indiqué ci-dessous:

@Ajax.ImageActionLink("/Images/btn_share.png", "Share pool", "SharePool", new { poolKey = Model.Id, poolName = Model.Name },
    new AjaxOptions { 
        UpdateTargetId="popup", 
        HttpMethod="GET", 
        InsertionMode = InsertionMode.Replace,
        LoadingElementId="loading_dialog",
        OnSuccess = "ShowPopup('#popup_share', true, true)"
    } 

ImageLinkAction est personnalisé, l'extension de la méthode à utiliser l'image comme lien, et ShowPopup est une fonction javascript qui affiche la div mis à jour (pour le faire paraître comme une popup)

Maintenant le code de balisage inséré dans le div qui crée le popup contient une forme comme ci-dessous

<div>
@using (Html.BeginForm()) {

    @Html.HiddenFor(model => model.ID)

    <div class="editor-label">
        @Html.LabelFor(model => model.EmailAddress)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.EmailAddress)
        @Html.ValidationMessageFor(model => model.EmailAddress)
    </div>

    //... other fields

    @Html.ValidationSummary(true)
    <p>
        <button type ="submit">Share</button>       
    </p>
}
</div>

Le problème avec l'envoi du formulaire: le bouton Soumettre des appels à la bonne action, mais avec une publication, ce qui cause ma page pour actualiser. Ce dont j'ai besoin est de publier des données avec l'ajax, de recevoir la réponse, qui est une autre vue partielle qui est insérée dans le

J'ai essayé de remplacer le bouton Soumettre avec l'Ajax.ActionLink comme ci-dessous

    @Ajax.ActionLink("Share", "Share",
        new Models.MyModel 
            {
                ID = Model.ID,
                EmailAddress = Model.EmailAddress
            },
        new AjaxOptions
            {
                UpdateTargetId="popup", 
                HttpMethod="POST", 
                InsertionMode = InsertionMode.Replace,
                LoadingElementId="loading_dialog",
                OnSuccess = "ShowPopup('#popup_share', true, true)"
            }

Le contrôleur de code ressemble à ceci:

[HttpPost]
public ActionResult SharePool(MyModel model)
{
    //...
    return PartialView("_MyPartialView", model)
}

Le problème est, dans le moment de l'Ajax ActionLink est rendu (lorsque le formulaire est chargé), il n'existe pas de valeur dans le Modèle.Votre adresse de courrier électronique, de sorte que mon POST d'action dans le contrôleur reçoit uniquement le paramètre ID.

Comment puis-je gérer cela? Idéalement, je pense que je devrais ajouter

OnBegin = "PreparePostData()"

Mais depuis que je sais javascript que fondamentalement, je n'ai aucune idée de comment puis-je le mettre en œuvre. Je pense que ce PreparePostData() doit collecter des champs de formulaire et de préparer l'objet routeValues paramètre, avant l'appel ajax est invoquée.

Quelqu'un peut me donner quelques indications sur la façon de mettre en œuvre cette?

Ou est tout autre, la meilleure approche à ce problème?

Merci

InformationsquelleAutor bzamfir | 2012-04-25