Как сделать вызов AJAX в представлении MVC Razor? - PullRequest
1 голос
/ 25 марта 2020

У меня есть вид Razor с вызовом AJAX, и он пропускает прямо над ним. У меня есть точка останова отладки на методе контроллера. Я никогда не доберусь туда. Кроме того, сценарий запуска Alert iin даже не запускается.

Я попытался переместить сценарий перед первым абзацем в этом случае. Без изменений.

Просмотр кода:

Он входит в оператор switch - случай "New", но не выполняет вызов Ajax. При отладке он попадает в @Session ["UserName"], а затем переходит на разрыв.

@Scripts.Render("~/bundles/jquery")
@Styles.Render("~/Content/css")

@switch (@Session["NavState"])
{
case "New":
    <br />
    <p>Hi <span class="username">@Session["UserName"]</span> !</p>
    <br />
    <p> I'm so glad you decided to join us. Feel free to look around.</p>

    <script type="text/javascript">
        $.post("UserProfile/SetSessionVar", { variable = "NavState" }, function () { });
    </script>

    break;
case "Exists":
    <br />
    <p>Welcome back <span class="username">@Session["UserName"]</span> !</p>
    <br />

    <script type="text/javascript">
        $.post("UserProfile/SetSessionVar", { variable = "NavState" }, function () { });
    </script>

    break;
default:
    break;
}

<script type="text/javascript">
$(document).ready(function ()
{
    Alert("here");
});
</script>

Я попытался изменить $ .post на $. ajax. Без изменений.

    <script type="text/javascript">
        function SetSessionVar() {
            $.ajax({
                type: "POST",
                url: "UserProfile/SetSessionVar",
                data: '{variable: "NavState"}',
                contentType: "application/json; charset=utf-8",
                dataType: "json"
            });
    </script>

Метод контроллера:

    public void SetSessionVar(string variable)
    {
        if (variable == "NavState")
        {
            Session["NavState"] = "x";
        }
    }

Bundle.config:

using System.Web.Optimization;

namespace GbngWebClient
{
public class BundleConfig
{
    public static void RegisterBundles(BundleCollection bundles)
    {
        bundles.Add(new ScriptBundle("~/bundles/jquery").Include(                                                                
                                     "~/Scripts/jquery-{version}.js"));

        bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(                                                                
                                     "~/Scripts/jquery.validate*"));

        bundles.Add(new ScriptBundle("~/bundles/modernizr").Include(                                                                
                                     "~/Scripts/modernizr-*"));

        bundles.Add(new ScriptBundle("~/bundles/bootstrap").Include(                                                                
                                     "~/Scripts/bootstrap.js"));

        bundles.Add(new StyleBundle("~/Content/css").Include(                                                              
                                    "~/Content/bootstrap.css",                                                              
                                    "~/Content/site.css",                                                              
                                    "~/Content/validation.css"));
    }
}
}

Ответы [ 2 ]

0 голосов
/ 27 марта 2020
var SetSessionVar = function () {
    $.ajax({
        url: "/UserProfile/SetSessionVar",
        type: "post",
        success: function (data) {
             data: '{variable: "NavState"}',
            contentType: "application/json; charset=utf-8",
            dataType: "json"
            }
            else {
                alert("failed");
            }
        }

    })
}
0 голосов
/ 25 марта 2020

Код предупреждения при запуске не удался, потому что он был заглавной A вместо строчной a. Тогда мой $ .post не был синтаксически правильным. Должно быть: $ .post ("UserProfile / SetSessionVar", {variable: "NavState"});

...