.net 6 中的 Ajax Post 操作后无法将 TempData 发送回同一视图

问题描述 投票:0回答:1

公平警告,我缺乏对控制器如何工作的基本了解,花几个小时阅读它们似乎没有帮助。这可能是一个糟糕的设计。然而,我想要完成的一切看起来应该相当简单,但我还没有取得任何进展。

设置为 vs2022,带有基本的 .net core 6 MVC Web 应用程序和 EF6。

此应用程序的每个功能都将位于单个静态页面上,使用单个表单。

我需要的是在文本更新时自动填充只读输入字段的表单,以便用户确认他们将正确的产品扫描到应用程序中,这些也将与表单的最终帖子一起提交。

所有功能都有效,直到用户输入的字段在更新时将值发送回家庭控制器,并且控制器执行查询以找到正确的值。当 httppost 操作尝试将此数据发送回视图时,它会中断。我尝试了很多方法来获取价值,但无法让它读取客户端。 TempData 似乎可以工作,因此我可以在视图中使用 C# 代码查看它,但不能修改现有的客户端标记。

这是我的相关控制器部分

public IActionResult Index()
{
    return View();
}

[HttpPost]
public IActionResult GetItem(string value)
{
    //item is assigned single string value from db
    item = //dbquery

    TempData["Message"] = item;

    // Tried changing this to a few different return types but nothing seems to change
    return View("Index");
}

模型都是从脚手架自动生成的文件,效果很好

在视图中,我暂时拥有了所有发回数据的js逻辑。我只使用ajax,因为这是我能找到的在不使用表单/按钮帖子的情况下将实时数据返回到控制器的唯一方法。 ajax 调用确实打开了正确的控制器操作并向其发送正确的数据,但我找不到将新的 TempData 值从控制器读回视图的方法:

<script type="text/javascript">
        function SendInput(sn) {   
                $.ajax({
                    type: "POST",
                    url: '@Url.Action("GetItem")',
                    data: { inputID: sn.target.value },
                    dataType: "text",
                });
                
                @{
                // tempval here does get assigned the proper item
                var tempval = TempData["Message"];
                if (tempval != null) 
                    {
                        //this code never generates or updates data on the view
                        @:var temp = @tempval.ToString();
                        @:$('#item').val(temp);
                    }
                }     
        }

        const serial = document.getElementById('InputID');
        serial.addEventListener('input', SendInput);         
</script>
ajax .net-core model-view-controller razor entity-framework-core
1个回答
0
投票

尝试:

[HttpPost]
public IActionResult GetItem(string value)
{
    //item is assigned single string value from db
    item = //dbquery

   return Json(item);
}

然后在你的ajax代码中添加 success: 函数,例如:

 $.ajax({
                    type: "POST",
                    url: '@Url.Action("GetItem")',
                    data: { inputID: sn.target.value },
                    dataType: "text",
                    success: function (temp) {
                             $('#item').val(temp);
                             }
                });
© www.soinside.com 2019 - 2024. All rights reserved.