模型更改时查看不更新

时间:2017-12-20 23:18:21

标签: asp.net-core-mvc

我有一个单页用户界面,如下所示。

在UI上有两个复选框,当用户切换复选框的状态时,我使用ajax在POST操作中将状态发布到HomeController。

在使用新复选框状态更新POST操作中的模型后,我重定向回GET操作以返回视图。

但是,UI不会使用新模型刷新。

有人可以帮忙吗?感谢。

Views/Home/Index.cshtml

    @{
    Layout = "_Layout";
}

@model WebApplication5.Controllers.HomeModel;


<h1>STS</h1>
<div>
    <input type="checkbox" id="UseVersionCheckBox" />Use version v1 in url
</div>
<br />
<div>
    <input type="checkbox" id="ResponseTypeTokenCheckBox" /> Return access token in url
</div>

<div>your check status : @Model.IsChecked</div>
<br />
<div>your text : @Model.Text </div>

_Layout.cshtml

    <!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>@ViewData["Title"] - WebApplication5</title>

</head>
<body>

    @RenderBody()
    <script src="~/jquery-2.1.0.min.js"></script>
    @RenderSection("Scripts", required: false)

    <script type="text/javascript">
        $(document).ready(function () {
            function fun() {
                var current = $("#UseVersionCheckBox").prop("checked");
                var current2 = $("#ResponseTypeTokenCheckBox").prop("checked");

                alert("values as:" + current + "," + current2);

                var json = {};
                json.UseVersionChecked = current;
                json.ResponseTypeTokenChecked = current2;
                var text = JSON.stringify(json);
                $.ajax({
                    type: "POST",
                    url: "Home/Index",
                    data: text,
                    dataType: 'json',
                    contentType: 'application/json; charset=utf-8',
                    error: function (r, s, e) {

                    },
                    success: function (r) {

                    },
                    complete: function () {

                    }
                });
            }

            $("#UseVersionCheckBox").click(fun);
            $("#ResponseTypeTokenCheckBox").click(fun);


        });
    </script>

</body>
</html>


HomeController.cs



public class HomeController : Controller
{


    public HomeController()
    {

    }

    public IActionResult Index()
    {
        HomeModel model;

        if (TempData.ContainsKey("model"))
        {
            var newmodel = JsonConvert.DeserializeObject<HomeModel>(TempData["model"].ToString());

            model = newmodel;

        }
        else
        {
            model = new HomeModel();
            model.IsChecked = false;
            model.Text = "not checked";
        }

        ModelState.Clear();
        return View(model);
    }

    [HttpPost]
    public IActionResult Index([FromBody] CheckStatus status)
    {
        HomeModel model = new HomeModel();

        model.IsChecked = true;
        model.Text = "UseVersionCheckBox : " + status.UseVersionChecked + " ; ResponseTypeTokenCheckbox : " + status.ResponseTypeTokenChecked;

        if (TempData.ContainsKey("model"))
            TempData.Remove("model");

        TempData.Add("model", JsonConvert.SerializeObject(model));

        ModelState.Clear();
        return RedirectToAction("Index", "Home");
    }
}

[Serializable]
public class HomeModel
{
    public bool IsChecked { get; set; }
    public string Text { get; set; }
}

public class CheckStatus
{
    public bool UseVersionChecked { get; set; }
    public bool ResponseTypeTokenChecked { get; set; }
}
奇怪的是,在检查了重定向到GET操作的响应后,新值就出现了,但浏览器中的网页仍显示旧的。为什么?

0 个答案:

没有答案