Question

Dans ce morceau de code

@using (Ajax.BeginForm("MyAction", "MyRouteValues", new AjaxOptions { OnSuccess = "myJSFunction(" + Model.IntegerParameter + ", '" + Model.StringParameter + "')" }))

Pourquoi mon javascript reconnaît-il correctement le modèle. null? Je suis sûr qu'il a des données dessus pendant que je vérifie la réponse et cela montre comme celui-ci

data-ajax-success="myJSFunction(111111, 'AAAAAA')"

Mon modèle de vue est vraiment simple et il ressemble à ça

public class MyViewModel
{
    public int IntegerParameter { get; set; }
    public string StringParameter { get; set; }
}

Comment puis-je réparer ça?

Informations supplémentaires

J'ai essayé de changer le deuxième paramètre en int, maintenant il ne passe pas comme null mais 0 Et cela se voit toujours dans la réponse dans Firebug.

J'ai ajouté le html.raw, mais il obtient toujours un null Valeur dans JavaScript.

Voici une capture d'écran du monde réel de ce que j'obtiens dans la réponse de la console:

enter image description here

--------------- Une autre mise à jour ------------------

J'ai essayé toutes les suggestions, mais cela semble être un Se mettre en bug MVC S # arp? J'ai essayé dans différents projets et sur différents PC, cela me arrive toujours. J'ai remarqué que cela ne se produit que s'il provient d'un modèle, il ressemble à ce qui se passe entre la réponse à JavaScript, la valeur de la chaîne se perd, qu'elle soit la première, la deuxième position dans le paramètre, mais si j'utilise une valeur codée dure, tel que:

myJSFunction(" + Model.IntegerParameter + ", 'AAAAAAAA')"

J'ai un résultat réussi, aussi si j'utilise jQuery comme tel:

myJSFunction(" + Model.IntegerParameter + ", $('#SearchString').val())"

Cela fonctionne aussi mais si je passe un modèle qui est une chaîne comme telle

myJSFunction(" + Model.IntegerParameter + ", '" + Model.StringParameter + "')"

Cela ne fonctionne pas.

Vous voulez donc voir ce qui se passe vraiment sur le monde réel où j'ai pris en compte les suggestions de @darin et @shark. Voici une capture d'écran:

enter image description here

Comme vous le voyez dans la réponse, il est là mais lorsqu'il est passé à JavaScript, il se perd. Voici aussi la vraie vie JavaScript

displayResultsPopUpWindow: function (model) {
    var postData = {
        transactionId: model.transactionId,
        searchString: model.searchString
    };

    $.post("/Invoicing/GetSearchResults", postData, function (data) {
        WindowHelper.displayWindow("Add Airline Transaction", "<div id='matchBookingResults'>" + unescape(data.viewHtml) + "</div>", 640, 500);
    });
},
Était-ce utile?

La solution 3

Ressemble à un bug dans l'architecture S # ARP, donc au lieu d'utiliser le modèle, je viens d'utiliser jQuery pour extraire la valeur dont j'avais besoin comme telle

myJSFunction(" + Model.IntegerParameter + ", $('#SearchString').val())"

Autres conseils

Impossible de reproduire le problème. Essayez comme ceci:

Modèle:

public class MyViewModel
{
    public int IntegerParameter { get; set; }
    public string StringParameter { get; set; }
}

Manette:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View(new MyViewModel
        {
            IntegerParameter = 1111,
            StringParameter = "AA'AA\"AA"
        });
    }

    [HttpPost]
    public ActionResult MyAction()
    {
        return Json(new { foo = "bar" });
    }
}

Voir:

@model MyViewModel

<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.js")" type="text/javascript"></script>
<script type="text/javascript">
    var myJSFunction = function (model) {
        alert('intParam=' + model.intParam + ', strParam=' + model.strParam);
    };
</script>

@using (Ajax.BeginForm(
    "MyAction",
    "Home",
    new AjaxOptions
    {
        OnSuccess = "myJSFunction(" + Json.Encode(new { intParam = Model.IntegerParameter, strParam = Model.StringParameter }) + ")"
    }
))
{
    <button type="submit">OK</button>
}

Lorsque le formulaire est soumis à l'aide d'Ajax, le rappel MyJSFunction Success est invoqué et a passé les valeurs correctes.

Il semble que ce soit une chaîne codée HTML. Essayez de faire ceci:

Html.Raw(Model.StringParameter)

Éditer: Essaye ça:

OnSuccess = Html.Raw("myJSFunction(" + Model.IntegerParameter + ", '" + Model.StringParameter + "')")

Votre SearchString est null probablement parce que la saisie a du nom SearchString - le cas de lettre a des moyens.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top