ASP MVC formulaire pour appeler une action spécifique et pas de redirection mais la mise à jour de la page d'origine

Je suis en utilisant ASP.net MVC 3 pour un projet, et à un point où je comprends plus, mais aussi en essayant d'apprendre les différences entre elle et les Formulaires monde, j'ai utilisé pendant si longtemps. Précédemment dans WebForms vous venez de mettre les champs là-bas, ajoutez un bouton, et de créer un événement, puis de gérer tout ce que vous devez à la publication.

Par exemple, j'ai un simple point de vue qui montre les détails de l'erreur. Je veux pousser une partie de l'information à propos de cette erreur à notre outil de suivi de l'API. Disons tout simplement le sujet et le contenu de l'erreur. Je voudrais en HTML faire quelque chose comme:

<form action="@Url.Action("Send")" method="post">
    <input id="subject" name="subject" type="text" value="@Model.subject" />
    <br />
    <input id="content" name="content" type="text" value="@Model.content" />
    <br />
    <input type="submit" value="Send" />
</form>

J'ai trouvé que la mention de mon ID d'entrée est de faire correspondre les noms de paramètre dans mon contrôleur, puis laissez-moi passer ces paramètres. Ceci est similaire à ce que vous voyez dans ce vieux poste par Scott Guthrie.

Tout d'abord, je tiens à appeler "Envoyer" dans mes Erreurs contrôleur, et non pas mes coordonnées. Ce fait ne l'appelle mon "Envoyer" action, mais alors redirige vers localhost/Erreurs/Envoyer, que je ne veux pas que ça.

Je veux être en mesure de soumettre ce formulaire, qui appelle l'action et le travail avec l'API à distance, et ensuite mettre à jour un message sur la page en cours, indiquant que l'erreur a été transféré.

Une fois que le problème a été soumis au bug tracker, comment puis-je, par exemple, afficher un DIV sur la page d'origine en passant arrière de contenu (par exemple, un lien vers la question dans le bug tracker)?

Mise à jour: Voici ce que je fais dans mon controller:

HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("http://localhost/redmine/issues.json");
request.Credentials = new NetworkCredential("username", "password");
request.Method = "POST";
request.ContentType = "application/json";
request.Accept = "application/json";
using (StreamWriter writer = new StreamWriter(request.GetRequestStream()))
{
writer.Write("'issue': { " +
"'project_id': 'project', " +
"'subject': 'Test issue'" +
"}");
}
WebResponse response = request.GetResponse();
Stream stream = response.GetResponseStream();
string json = "";
using (StreamReader reader = new StreamReader(stream))
{
json = reader.ReadToEnd();
}

Aussi, ici, est ce que je fais de mon point de vue (simplifié, et après aide de Phillip)

@model webapp.Models.app_errors
<script type="text/javascript">
function SendErrors() {    
alert(@Model); //here I get a 'webapp undefined error'
alert(Model); //Model is undefined. If I reference @Model.App_name or another value anywhere, works fine in rest of view
$.ajax({
type: 'POST', //(probably)
url: '../SendToRedmine',
cache: false, //(probably)
dataType: 'json', //(probably)
data: @Model,
success: function(result)
{
alert("The error has been transferred");
//you can also update your divs here with the `result` object, which contains whatever your method returns
}
});
}
</script>
<input type="button" onclick='SendErrors()'/>
Vous avez besoin d'utiliser AJAX.

OriginalL'auteur jmlumpkin | 2012-05-25

Leave a Reply

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *