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